• 那些JS容易忽略的题


    位运算:

    按位于(AND) 只在两个数值的对应位都是1时才返回1,任何一位为0,都是0.

    var a = 5&2; 

    parseInt('5').toString(2); // "101"
    parseInt('2').toString(2); // "10"
    explain:
    101
    010 = 0

    按位非(NOT) 执行按位非得结果就是返回数值的反码。按位非是少数几个与二进制计算有关的操作付之一。

    按位非的本质是操作数的负值减1.

    var b = ~5 - 2;  

    explain:
    -6 - 2 = -8;

    按位或(OR) 有一个位是1的情况下返回1,只有两个位数都是0返回0.

    parseInt('5').toString(2);  // 101 二进制
    parseInt('2').toString(2);  // 010 二进制
    explain:
    101
    010 = 111
    parseInt('111',2); // 7 十进制

    按位异或(XOR)  两个数值对应位上只有一个1时返回1,对应的两位都是1或都是0返回0.

    var d = 5 ^ 3;

    parseInt('5').toString(2);  // 101 二进制
    parseInt('3').toString(2);  // 011 二进制
    explain:
    101
    011 = 110
    parseInt('110',2)  // 6 十进制

    布尔操作符

    逻辑非 应用于ECMAScript中的任何值。无论什么数据类型,都会返回一个布尔值。操作符首先会将操作数转换为一个布尔值,然后求反。

    !false  // true
    !NaN  // true
    !null   // true
    !0 // true
    !{} // false ![] // false !'qwe' // false !"" // true !" " // false

    逻辑与 可以应用于任何类型的操作数,不仅是布尔值。

    真值表

    第一个操作数 第二个操作数 结果
    true   true true
    true false false
    false true false
    false false false

    有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。

    此时遵循规则:

    1.如果第一个是对象,则返回第二个操作数。

    2.如果第二个是对象,则只在第一个操作数的求值为true时返回该对象。

    3.如果两个都是对象,则返回第二个操作数。

    4.如果有一个是null,则返回null。

    5.如果有一个是NaN,则返回NaN。

    6.如果有一个是undefined,则返回undefinded。

    属于短路操作,即第一个操作数能够决定结果,就不会再对第二个求值。如果第一个操作数是false,则无论第二个是什么值,结果都不是true。

    var a = true;
    var result = (a&&b);   // Uncaught  b is not defined 错误未定义,不能在逻辑与中使用未定义的值。
    var a = false;
    var b = true;
    var result = (a && b);  // false
    var result2 = (a && c); // false 无论第二个有无定义,第一个false,结果必定是false,不会再对第二个求值。

    逻辑或  如果有一个不是布尔值,逻辑或也不一定返回布尔值。

    真值表

    第一个操作数 第二个操作数 结果
    true   true true
    true false true
    false true true
    false false false

    遵循规则:

    1. 如果第一个是对象,则返回第一个操作数。

    2. 如果第一个求值结果为false,则返回第二个操作数。

    3. 如果两个都是对象,则返回第一个操作数。

    4. 如果两个都是null,则返回null。

    5. 如果两个都是NaN,则返回NaN。

    6. 如果两个都是undefined,则返回undefined。

    短路操作符。如果第一个操作数求值结果是true,就不会对第二个求值。

    var a = true;        // undefined
    var b = (a || c);    // true   第一个true,结果必定是true,不会再对第二个求值。

    可以用来避免为变量赋null或undefined值。

    var a = a || 0 

    加减乘除模操作符

    乘 *特殊规则  如果有一个不是数字,则后台会调用Number()转换为数值,在计算。

    除 *特殊规则  1. 0/0 = NaN。 2. 如果有一个不是数字,则后台会调用Number()转换为数值,在计算。

    模 *特殊规则

    1. 被除数是无穷大除数是有限大数值,结果NaN。

    2.被除数是有限大除数是0,结果NaN。

    3. 0%0 = 0。

    4.如果有一个不是数字,则后台会调用Number()转换为数值,在计算。

    加 *特殊规则

    1. 如果两个都是字符串,拼接。

    2. 如果有一个是字符串,则将另一个转换为字符串,拼接。

    3. 如果有一个是对象、数值或布尔值,则调用toString()方法取得相应字符串值。

    4. 对于null和undefined,则分别调用String()函数取得字符串"null"和"undefined"。

    null + null               // NaN
    null + undefined          // NaN
    undefined + undefined     // NaN
    {} + null                 // 0
    {abc:"abc"} + null        // 0
    {abc:"abc"} + 2           // 2

    *特殊规则 ECMAScript中的减法在各种数据转换需要注意。

    1. 如果有一个是NaN,结果NaN。

    2. +0 减 +0 结果+0。

    3. +0 减 -0 结果-0。

    4. -0 减 -0 结果-0。

    5. 如果有一个是字符串、布尔值、null或undefined,在后台调用Number()函数转换为数值,在计算。如果转换结果是NaN,则结果NaN。

    6. 如果有一个是对象,则调用对象的valueof()方法已取得表示该对象的数值。得到的值是NaN,结果NaN。如果对象没有valueof()方法,则调用toString()方法并将得到的字符串转换为数值。

    NaN-1           //NaN
    NaN-NaN         //NaN
    undefined-1     //NaN
    undefined-undefined //NaN
    '123'-'312'     //-189
    'qwe'-'123'     //NaN
    null-null       //0
    null-NaN        //NaN
    5-NaN           //NaN
    null-undefined  //NaN

    关系操作符

    <

    >

    <=

    >=

    相等操作符

    相等和不相等

    全等和不全等

    条件,赋值操作符 

    条件

    赋值

    Split

    [""].length                     // 1
    [].length                       // 0
    ''.split(',').length            // 1
    ''.split('').length             // 0
    ''.split('')                    // []
    ''.length                       // 0
  • 相关阅读:
    <锋利的jQuery>读书笔记
    OpenStack虚拟机冷迁移与热迁移
    oh-my-zsh安装和简单定制
    sqlalchemy查询结果类型简析
    python 错误捕获机制分析
    《JavaScript.DOM》读书笔记
    <HTML深入浅出> 读书笔记
    Python多任务—进程
    Python多任务—线程
    Go的流程控制
  • 原文地址:https://www.cnblogs.com/papajia/p/4514189.html
Copyright © 2020-2023  润新知