| 应用的对象 | 操作 | 
|---|---|
| 包含有效数字字符 | 转换为数字值,再执行 | 
| 不包含有效数字字符 | NaN | 
| false | 转换为0,再执行 | 
| true | 转换为1,再执行 | 
| 浮点数值 | 执行 | 
| 对象 | 先调用对象的 valueOf() 方法取得值,然后应用上述规则;如果结果是 NaN,再调用 toString() 方法取得值,然后应用上述规则 | 
计算二进制补码的步骤: 1. 求数值绝对值的二进制码 2. 求二进制反码 3. 将二进制反码加 1
ECMAScript 会隐藏上面的信息,以二进制字符串形式输出负数时,只会在这个负数绝对值的二进制码前加一个负号:var num = -18;alert(num.toString(2)); //"-10010"默认情况下,ECMAScript 中所有整数都是有符号整数。如果对非数值应用位操作符,会先自动使用 Number() 函数将该值转换为数值,再进行下一步操作。| 第一个数的位 | 第二个数的位 | 结果 | 
|---|---|---|
| 1 | 1 | 1 | 
| 1 | 0 | 0 | 
| 0 | 1 | 0 | 
| 0 | 0 | 0 | 
| 第一个数的位 | 第二个数的位 | 结果 | 
|---|---|---|
| 1 | 1 | 1 | 
| 1 | 0 | 1 | 
| 0 | 1 | 1 | 
| 0 | 0 | 0 | 
| 第一个数的位 | 第二个数的位 | 结果 | 
|---|---|---|
| 1 | 1 | 0 | 
| 1 | 0 | 1 | 
| 0 | 1 | 1 | 
| 0 | 0 | 0 | 
| 操作数 | 结果 | 
|---|---|
| 对象 | false | 
| 空字符串 | true | 
| 非空字符串 | false | 
| 0 | true | 
| 非 0 数值(包括 Infinity) | false | 
| null | true | 
| NaN | true | 
| undefined | true | 
| 第一个操作数 | 第二个操作数 | 结果 | 
|---|---|---|
| true | true | true | 
| true | false | false | 
| false | true | false | 
| false | false | false | 
| 操作数类型 | 结果 | 
|---|---|
| 第一个操作数是对象 | 返回第二个操作数 | 
| 第二个操作数是对象 | 只有第一个操作数求值结果为 true,才会返回该对象 | 
| 两个操作数都是对象 | 返回第二个操作数 | 
| 有一个操作数是 null | null | 
| 有一个操作数是 NaN | NaN | 
| 有一个操作数是 undefined | undefined | 
| 第一个操作数 | 第二个操作数 | 结果 | 
|---|---|---|
| true | true | true | 
| true | false | true | 
| false | true | true | 
| false | false | false | 
| 操作数类型 | 结果 | 
|---|---|
| 第一个操作数是对象 | 返回第一个操作数 | 
| 第一个操作数是求值结果为 false | 返回第二个操作数 | 
| 两个操作数都是对象 | 返回第一个操作数 | 
| 有一个操作数是 null | null | 
| 有一个操作数是 NaN | NaN | 
| 有一个操作数是 undefined | undefined | 
| 操作数类型 | 结果 | 
|---|---|
| 都是数值 | 常规乘法运算,如果乘积超过表示范围,则返回 Infinity | 
| 有一个操作数是 NaN | NaN | 
| Infinity 与 0 相乘 | NaN | 
| Infinity 与 非 0 数值相乘 | Infinity | 
| Infinity 与 Infinity 相乘 | Infinity | 
| 有一个操作数不是数值 | 后台调用 Number() 转换为数值,在应用上面的规则 | 
| 操作数类型 | 结果 | 
|---|---|
| 都是数值 | 常规除法运算,如果商超过表示范围,则返回 Infinity | 
| 有一个操作数是 NaN | NaN | 
| Infinity 被 Infinity 除 | NaN | 
| 0 被 0 除 | NaN | 
| 非零的有限数被 0 除 | Infinity | 
| Infinity 与 非 0 数值除 | Infinity | 
| 有一个操作数不是数值 | 后台调用 Number() 转换为数值,再应用上面的规则 | 
| 操作数类型 | 结果 | 
|---|---|
| 有一个操作数是 NaN | NaN | 
| Infinity 加 Infinity | Infinity | 
| -Infinity 加 -Infinity | -Infinity | 
| +0 加 +0 | +0 | 
| -0 加 -0 | -0 | 
| +0 加 -0 | +0 | 
| 两个操作数都是字符串 | 第二个与第一个拼接 | 
| 只有一个操作数是字符串 | 另一个字符串转换为字符串,再拼接 | 
| 有一个操作数是对象、数值或布尔值 | 调用它的 toString() 方法取得字符串值,再按照字符串规则处理;对于nudefined 和 null,则调用 String() 取得 “undefined” 和 “null” | 
| 操作数类型 | 结果 | 
|---|---|
| 两个操作数都是数值 | 常规减法 | 
| 有一个操作数是 NaN | NaN | 
| Infinity 减 Infinity | NaN | 
| -Infinity 减 -Infinity | -Infinity | 
| Infinity 减 -Infinity | Infinity | 
| -Infinity 减 Infinity | -Infinity | 
| +0 减 +0 | +0 | 
| +0 减 -0 | -0 | 
| -0 减 -0 | +0 | 
| 有一个操作数是字符串、布尔值、null 或 undefined | 调用 Number() 函数转换为数值,再执行减法;如果转换结果是 NaN,结果就是 NaN | 
| 有一个操作数是对象 | 调用对象的 valueOf() 取得数值;如果值是 NaN,结果就是 NaN;如果没有 valueOf(),则调用 toString() 并将得到的字符串转换为数值 | 
| 操作数类型 | 结果 | 
|---|---|
| 两个操作数都是数值 | 数值比较 | 
| 两个操作数都是字符串 | 比较两个字符串中对应的字符编码值 | 
| 有一个操作数是数值 | 另一个操作数转换为数值,再比较 | 
| 有一个操作数是对象 | 调用对象的 valueOf() ,再按照前面的规则执行比较;如果对象没有 valueOf() 方法,则调用 toString() 并将得到的结果进行比较 | 
| 有一个操作数是布尔值 | 先转换为数值,再比较 | 
注意:
用关系操作符比较两个字符串时,比较的是两个字符串中对应位置的每个字符的字符编码值。因此,如果要真正按字母表顺序比较字符串,就必须把两个操作数都转换为相同的大小写形式后,再进行比较。比较数值的字符串形式时,比较的也是字符串编码。任何操作数与NaN 比较,结果都是 false。<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>关系操作符</title></head><body><script type="text/javascript"> console.log(5 > 3);//true console.log(5 < 3);//false //字符串比较的是字符串中对应位置的字符编码值,而大写字母的编码值都小于小写字母的字符编码 console.log("Brick" < "alphabet");//true console.log("Brick".toLowerCase() < "alphabet".toLowerCase());//false;全部转为小写或者大写,这样就能按照字母表顺序比较 console.log("23" < "3");//true;数字字符串比较的还是字符编码 console.log("23" < 3);//false;其中一个操作数如果是数字,就会把另一个操作数也转为数字后,再进行比较 console.log("a" < 3);//false;非法数字的字符串会被转换为 NaN,任何操作数与 NaN 比较都是 false。 console.log(NaN < 3);//false console.log(NaN >= 3);//false</script></body></html>| 操作数类型 | 结果 | 
|---|---|
| 有一个操作数是布尔值 | 先转换为数值;false 转为 0,true 转为 1 | 
| 一个操作数是字符串,另一个是数值 | 先将字符串转换为数值,再比较 | 
| 一个操作数是对象,另一个不是 | 调用对象的 valueOf() 方法,再比较 | 
比较规则:
null 和 undefined 是相等的。比较相等性之前,不能将 null 和 undefined 转换成其他任何值。有一个操作数是 NaN,则相等操作符返回 false;即使两个操作数都是 NaN,相等操作符也是返回 false(因为 NaN 不等于 NaN)。如果两个操作数都是对象,则比较它们是不是同一个对象(即指向同一个对象)。注意:
null == undefined ,返回 true。null === undefined,返回 false。为了保证代码中数据类型的完整性,推荐使用全等和不全等操作符。新闻热点
疑难解答