你不知道的javascript(中卷)

2019-02-21  本文已影响0人  土豪码农

第一部分

1.类型

    var a;
    console.log(typeof b); //undefined
    console.log(typeof a); //undefined

为什么会这样,因为typeof有个保护机制,以防报is not defined终止程序,可以利用这个特点去判断变量是否已被声明使用

if(typeof a !== 'undefined'){
        //要执行的操作
 }

还有什么办法能判断变量是否已经被声明或使用了呢

if(window.a){
        //要执行的操作
 }
    var a;
    console.log(a); //undefined 声明但没有赋值,不会阻断代码
    console.log(b); //b is not defined 没有声明,会阻断代码,停止编译

2.值

    function fn(a,b,c) {
        console.log(arguments); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
        console.log(Array.prototype.slice.call(arguments)); //[1, 2, 3]
        console.log(Array.from(arguments)); //[1, 2, 3]
        return
    }
    fn(1,2,3);

浅拷贝一个数组

const arr = [1,2];
    const newArr = arr.slice();
    arr.push(3);
    console.log(arr); //[1,2,3]
    console.log(newArr); //[1,2]
    const str = 'a';
    const arr = [1,2];
    str.toUpperCase();
    console.log(str); //'a'并没有改变
    console.log(str.toUpperCase()); //'A'
    arr.push(3);
    console.log(arr); //[1,2,3]
    console.log(Number.EPSILON); //2.220446049250313e-16
    function numbersEqual(n1,n2) {
        return Math.abs(n1-n2) < Number.EPSILON //Math.abs是绝对值
    }
    console.log(numbersEqual(0.1 + 0.2, 0.3)); //true解决了0.1+0.2不等于0.3的问题了
NaN == NaN //false
console.log(NaN != NaN); //true
console.log(NaN !== NaN); //true

判断NaN可以用isNaN,但是js内置的isNaN工具函数有点bug,NaN应该是一个number类型的但又不是数字的一种情况,js内置的isNaN检测不是数字类型的都会返回true,可以使用es6新增的Number.isNaN去判断,不支持es6也可以使用NaN不等于NaN并且typeof是number类型的特性去判断

    console.log(isNaN('a')); //true
    console.log(isNaN(NaN)); //true
    console.log(Number.isNaN('a')); //false
    console.log(Number.isNaN(NaN)); //true
    console.log(-1 / 0); //-Infinity
    console.log(1 / 0); //Infinity
上一篇下一篇

猜你喜欢

热点阅读