Boolean()
| 数据类型 | 转化为true | 转化为false |
|---|---|---|
| Boolean | true | false |
| String | 任何非空字符串 | ""(空字符串) |
| Number | 任何非零数字值(包括无穷大) | 0和NaN |
| Object | 任何对象 | null |
| Undefined | undefined |
Number()
- 如果是Boolean值,true和false将分别被转化为1和0。
- 如果是数字值,只是简单的传入和返回。
- 如果是null值,返回0。
- 如果是undefined,返回NaN。
- 如果是字符串遵循一下规则:
- 如果字符串中包含数字(不论正负),则将其转换为十进制。(注意:"00011"会变成11。前面的零会被忽略)
- 如果字符串中包含有效的小数格式,如"1.1",则将其转换为对应的小数数值。(同样前面的零会被忽略)
- 如果字符串中包含有效的十六进制格式,列如"0xf",则将其转换为相同的十进制整数值。
- 如果字符串是空的(不包含任何字符),则将其转换为0。
- 如果字符串中包含上述格式之外的字符,则将其转换为NaN。
- 如果是对象,则调用对象的valueOf()方法,然后再次依照前面的规则返回的字符串值。
一元操作符 ++/--
- 在应用与一个包含有效数字字符的字符串时,先将其转为数字值,再执行加减1操作。字符串变量变成数值变量。
- 在应用于一个不好喊有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量。
- 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。
- 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。
- 在应用于对象时,先调用对象对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则调用toString()方法后再应用前述规则。对象变量变成数值变量。
布尔操作符 !
- 如果操作数是一个对象,返回false。
- 如果操作数是一个空字符串,返回true。
- 如果操作数是一个非空字符串,返回false。
- 如果操作数是数值0,返回true。
- 如果操作数是任意非0数值(包括Infinity),返回false。
- 如果操作数是null,返回true。
- 如果操作数是NaN,返回true。
- 如果操作数是undefined,返回true。
逻辑与 &&
| 第一个操作数 | 第二个操作数 | 结果 |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | true |
| 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。
与逻辑与操作符相似,逻辑或操作符也是短路操作符
乘法操作符 *
- 如果操作数都是数值,执行常规的乘法计算,即两个正数或两个负数相乘的结果还是正数,而如果只有一个操作数有符号,那么结果就是负数。如果乘积超过了ECMAScript数值的表示范围,则返回Infinity或- Infinity。
- 如果有一个操作数是NaN,则结果是NaN。
- 如果是Infinity 与0相乘,则结果是NaN。
- 如果是Infinity 与非0数值相乘,则结果是Infinity 或-Infinity,取决于有符号操作数的符号。
- 如果是Infinity 与Infinity 相乘,则结果是Infinity。
- 如果有一个操作数不是数值,则在后台调用Number( )将其转换为数值,然后再用上面的规则。
除法操作符 /
- 如果操作数都是数值,执行常规的除法计算,即两个正数或两个负数相除的结果是正数,而如果只有一个操作数有符号,那么结果就是负数。如果商超过了ECMAScript数值的表示范围,则返回Infinity或-Infinity。
- 如果有一个操作数是NaN,则结果是NaN。
- 如果是Infinity被Infinity除,则结果是NaN。
- 如果是零被零除,则结果是NaN。
- 如果是非零的有限数被零除,则结果是Infinity或- Infinity,取决于有符号操作数的符号。
- 如果是Infinity被任何非零数值除,则结果是Infinity或- Infinity,取决于有符号操作数的符号。
- 如果有一个操作数不是数值,则在后台调用Number( )将其转换为数值,然后再用上面的规则。
取余操作符 %
- 如果操作数都是数值,执行常规的除法计算,返回除得的余数;如果被除数是无穷大值而除数是有限大的数值,则结果是NaN。
- 如果被除数是有限大的数值而除数是零,则结果是NaN。
- 如果是Infinity被Infinity除,则结果是NaN。
- 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。
- 如果被除数是零,则结果是零。
- 如果有一个操作数不是数值,则在后台调用Number ()将其转换为数值,然后再应用上面的规则。
加法操作符 +
- 如果有一个操作数是NaN,则结果是NaN。
- 如果是Infinity加Infinity,则结果是Infinity。
- 如果是-Infinity 加-Infinity,则结果是-Infinity。
- 如果是Infinity 加-Infinity,则结果是NaN。
- 如果是+0加+0,则结果是+0。
- 如果是-0加-0,则结果是-0。
- 如果是+0加-0,则结果是+0。
- 如果有一个操作数是字符串,那么就要应用如下规则:
- 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来。
- 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
减法操作符 -
- 如果有一个操作数是NaN,则结果是NaN。
- 如果是Infinity减Infinity,则结果是NaN。
- 如果是-Infinity 减- Infinity,则结果是NaN。
- 如果是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()方法并将得到的字符串转换为数值。
关系操作符 <小于 >大于 <=小于等于 >=大于等于
- 如果两个操作数都是数值,则执行数值比较。
- 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
- 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
- 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
- 如果一个操作数是数值, 则将另一个操作数转换为一个数值,然后执行数值比较。
相等操作符 == !=
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,false 转换为0,而true 转换为1。
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。
- 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
- 这两个操作符在进行比较时则要递循下列规则:
- null和undefined是相等的。
- 要比较相等性之前,不能将null和undefined转换成其他任何值。
- 如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。重要提示:即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN。
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。
下表是一些特殊情况
| 表达式 | 值 | 表达式 | 值 |
|---|---|---|---|
| null == undefined | true | true == 1 | true |
| "NaN" == NaN | false | true == 2 | fasle |
| 5 == NaN | false | undefined == 0 | false |
| NaN == NaN | false | null == 0 | false |
| NaN != NaN | true | "5" == 5 | true |
| false == 0 | true |
第一次发文章希望可以帮助到新手朋友们
整理来源:JavaScript高级程序设计第三版