美文网首页
一些有关js的零碎知识

一些有关js的零碎知识

作者: 年丶轮 | 来源:发表于2019-07-22 21:50 被阅读0次

1、廖雪峰老师js的一个小题

脑洞大开

很久很久以前,有个叫阿隆佐·邱奇的帅哥,发现只需要用函数,就可以用计算机实现运算,而不需要0、1、2、3这些数字和+、-、*、/这些符号。

JavaScript支持函数,所以可以用JavaScript用函数来写这些计算。来试试:

'use strict';

// 定义数字0:
var zero = function (f) {
    return function (x) {
        return x;
    }
};

// 定义数字1:
var one = function (f) {
    return function (x) {
        return f(x);
    }
};

// 定义加法:
function add(n, m) {
    return function (f) {
        return function (x) {
            return m(f)(n(f)(x));
        }
    }
}
// 计算数字2 = 1 + 1:
var two = add(one, one);

// 计算数字3 = 1 + 2:
var three = add(one, two);

// 计算数字5 = 2 + 3:
var five = add(two, three);

// 你说它是3就是3,你说它是5就是5,你怎么证明?

// 呵呵,看这里:

// 给3传一个函数,会打印3次:
(three(function () {
    console.log('print 3 times');
}))();

// 给5传一个函数,会打印5次:
(five(function () {
    console.log('print 5 times');
}))();
print 3 times
print 3 times
print 3 times
print 5 times
print 5 times
print 5 times
print 5 times
print 5 times

2、练习
请使用箭头函数简化排序时传入的函数:

'use strict'
var arr = [10, 20, 1, 2];
arr.sort((x, y) => {
    if(x<y) return -1;
    if(x>y) return 1;
    return 0;
});
console.log(arr); // [1, 2, 10, 20]


// 2
'use strict'
var arr = [10, 20, 1, 2];
arr.sort((x, y) => x-y)
console.log(arr); // [1, 2, 10, 20]

3、一些应该注意的方法

  • 不要使用new Number()、new Boolean()、new String()创建包装对象;

  • 用parseInt()或parseFloat()来转换任意类型到number;

  • 用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};

  • typeof操作符可以判断出number、boolean、string、function和undefined;

  • 判断Array要使用Array.isArray(arr);

  • 判断null请使用myVar === null;

  • 判断某个全局变量是否存在用typeof window.myVar === 'undefined';

  • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'。

  • 任何对象都有toString()方法吗?null和undefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。

  • number对象调用toString()报SyntaxError报错:

123.toString(); // SyntaxError
// 遇到这种情况,要特殊处理一下:
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

4、如何改变一个对象的原型
在编写JavaScript代码时,不要直接用obj._proto_去改变一个对象的原型,并且,低版本的IE也无法使用_proto_
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming:

// 原型对象:
var Student = {
    name: 'Robot',
    height: 1.2,
    run: function () {
        console.log(this.name + ' is running...');
    }
};

function createStudent(name) {
    // 基于Student原型创建一个新对象:
    var s = Object.create(Student);
    // 初始化新对象:
    s.name = name;
    return s;
}

var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true

5、navigator
navigator对象表示浏览器的信息,最常用的属性包括:

  • navigator.appName:浏览器名称;
  • navigator.appVersion:浏览器版本;
  • navigator.language:浏览器设置的语言;
  • navigator.platform:操作系统类型;
  • navigator.userAgent:浏览器设定的User-Agent字符串。

相关文章

  • 一些有关js的零碎知识

    1、廖雪峰老师js的一个小题 脑洞大开 很久很久以前,有个叫阿隆佐·邱奇的帅哥,发现只需要用函数,就可以用计算机实...

  • Js基础知识学习-----from 米升亮

    由于这两周在开发H5推广模板,所以结合实战在学习js基础。由于js知识点比较零碎,故总结一些零碎的知识点。 主要学...

  • JS框架 - 收藏集 - 掘金

    关于js、jq零碎知识点 - 掘金写在前面: 本文都是我目前学到的一些比较零碎的知识点,也是相对偏一点的知识,这是...

  • Js流水账知识点

    在学js的过程中,记录一些零碎的小知识,以便以后翻看。持续更新……学习资料:JavaScript教程 以及 《你不...

  • JavaScript知识点

    记录JavaScript学习中的一些零碎笔记、知识点、技巧,看似很基础但很实用。 数据类型 比较的奥秘 JS中的各...

  • JS零碎知识总结

    =============================================== JS篇 ①JS 垃...

  • JS零碎知识要点

    1.常用keycode 2.Vue中的$refs 一般来讲,获取DOM元素,需document.querySele...

  • JS经典算法编程题学习系列-1

    JS学习过程中,知识点很多很零碎,但是总有一些经典的算法问题出现在工作、学习之中。典型的问题当你找工作的时候...

  • 熟悉事件循环?那谈谈为什么会分为宏任务和微任务

    什么是事件循环 在了解事件循环前,需要一些有关 JS 特性的前置知识。 JS 引擎是单线程的,直白来说就是一个时间...

  • 考核后的部分总结

    这篇文章里面问的一些知识点都是我在与学长交谈时候遇到的有关网页的问题。 一、js数据类型 学长问:在js当中的基本...

网友评论

      本文标题:一些有关js的零碎知识

      本文链接:https://www.haomeiwen.com/subject/itrilctx.html