应用的对象 | 操作 |
---|---|
包含有效数字字符 | 转换为数字值,再执行 |
不包含有效数字字符 | 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。为了保证代码中数据类型的完整性,推荐使用全等和不全等操作符。新闻热点
疑难解答