基础:整理JavaScript高级程序设计中部分涉及类型转化的操作

158 阅读9分钟

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高级程序设计第三版