美文网首页
JS的奇妙语法

JS的奇妙语法

作者: eleorc | 来源:发表于2018-04-23 22:59 被阅读0次

    代码在node.js环境中测试通过。

    比较运算符

    false == 0; // true
    false === 0; // false
    NaN === NaN; // false
    isNaN(NaN); // true
    1 / 3 === (1 - 2 / 3); // false
    Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
    

    第一种是==比较,它会自动转换数据类型再比较
    第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
    NaN这个特殊的Number与所有其他值都不相等,包括它自己
    唯一能判断NaN的方法是通过isNaN()函数
    浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值

    数组和对象

    [].length; //0
    ({}).constructor; //[Function: Object]
    'abc'.length;//3
    (1).constructor;//[Function: Number]
    false.constructor;//[Function: Boolean]
    

    在js中,数组和对象是语言原生支持的数据结构。啥叫“原生支持”,就是当创建了这种数据结构时,就自带一堆属性和方法。类似的,字符串、boolean和Number也是原生的数据结构。

    布尔表达式

    if(!null){console.log(1)};//1
    if(!undefined){console.log(1)};//1
    if(!0){console.log(1)};//1
    if(!NaN){console.log(1)};//1
    if(!''){console.log(1)};//1
    if({})(console.log(1))//1
    

    JavaScript把null、undefined、0、NaN和空字符串''视为false,其他值一概视为true。
    不要试图认为{}是null。因为{}是js内置对象,出生自带光环(({}).constructor;)的,所以必然不是null。

    var c = {};
    if(JSON.stringify(c) ==="{}"){ console.log(1);}//1
    
    

    迭代

    for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。
    当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:

    var a = ['A', 'B', 'C'];
    a.name = 'Hello';
    for (var x in a) {
        console.log(x); // '0', '1', '2', 'name'
    }
    

    for ... of循环则完全修复了这些问题,它只循环集合本身的元素.但是for of循环只能作用于集合对象。

    //一个对象
    var xiaoming = {
        name: '小明',
        birth: 1990,
        school: 'No.1 Middle School',
        height: 1.70,
        weight: 65,
        score: null
    };
    //测试遍历对象for of 
    for (var x of xiaoming) { //TypeError: xiaoming is not iterable
        console.log(x);
    }
    //测试遍历对象for in 
    for (var x in xiaoming) { //ok
        console.log(x);
    }
    

    相关文章

      网友评论

          本文标题:JS的奇妙语法

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