JavaScript类型转换和==隐式转换总结

JavaScript类型转换和==隐式转换总结

又重新回去看了下Javascript权威指南,以前对类型转换和隐式转换的细节不怎么在意,因为在工作中一般都会避免不可预知的隐式转换,重新认真的再看一下,总结一下规律(觉得多的记住加粗的即可)。

类型转换

原始类型(string、boolean、number、null、undefined)间转换:都是调用相应的包装函数,没有则不能转换(undefined、null),例如:string转number使用Number(string),undefined转number使用Number(undefined) = NaN,因为undefined、null没有包装函数,故其他类型无法转undefined、null

原始类型转对象:new自身的包装函数

其他类型转布尔类型:

False:undefined、null、0、-0、NaN、""(空字符串)

True:以上的其他值

 

类型转换表
  字符串 数字 布尔值 对象
undefined 'undefined' NaN false TypeError
null 'null' 0 false TypeError
true 'true' 1   new Boolean(true)
false 'false' 0   new Boolean(false)
""(空字符串)   0 false new String("")
"1.2"(非空,数字)   1.2 true new String("1.2")
“one”(非空,非数字)   NaN true new String(“one”)
0 ‘0’   false new Number(0)
-0 ‘0’   false new Number(-0)
NaN ‘NaN’   false new Number(NaN)
Infinity ‘Infinity’   true new Number(Infinity)
-Infinity ‘Infinity’   true new Number(-Infinity)
1(无穷大,非零) '1’   true new Number(1)
{}(任意对象) 参考下规 参考下规 true  
[](任意数组) '' 0 true  
[9](一个元素数组) '9' 9 true  
["a"](其他数组) 使用join方法 NaN true  
function(){}(任意函数) 参考下规 NaN true  

 

复合类型(Object)转原始类型:

对象转字符串:

  1. 先调用toString,如返回原始值,则将原始值转成字符串返回
  2. 没有toString或该方法不返回原始值 ,调用valueOf,如返回原始值,则将原始值转成字符串返回  
  3. 都不行则报类型错误异常

对象转数字:

  1. 先调用valueOf,如返回原始值,则将原始值转成数字返回
  2. 没有valueOf或该方法不返回原始值 ,调用toString,如返回原始值,则将原始值转成数字返回  
  3. 都不行则报类型错误异常

==隐式转换

==隐式转换遵循规则,Object --> String --> Number <-- Boolean,即不同类型根据箭头方向转换对比。

比如Object == Boolean,会都转成Number来比较

你可能感兴趣的:(javascript,Javascript)