首页 > 代码库 > JavaScript的数据类型的隐式转换

JavaScript的数据类型的隐式转换

什么是弱类型语言?
计算机语言的类型可以分为强类型和弱类型两种。

二者之间的区别,就在于计算时,不同类型数据是否可以透明的隐式转换。如果一个语言可以隐式转换它的所有类型,那么它的变量、表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确的类型,这样的语言就属于弱类型语言。

与此相对,强类型语言的类型之间不一定有隐式转换。

弱类型相对于强类型来说,类型检查更不严格,比如允许变量类型的隐式转换,允许强制类型转换等等,而强类型语言一般不允许这么做。
一、1+"2"+"2" //"122"

二、1+ +"2"+"2" //"32"

三、1++"2"+"2" //Invalid left-hand side expression in postfix operation

四、{}+1 //1

五、1+{} //"1[object Object]"

六、1-{} //NaN

七、1+!{} //1

八、1-!{} //1

九、({}+1) //"[object Object]1"

十、[]+1 //"1"

十一、1+[] //"1"

十二、1-[] //1

十三、[]+{} //"[object Object]"

十四、{}+[] //0

十五、{}+{} //chrome:"[object Object][object Object]",Firfox:NaN

十六、[]==[] //false

十七、[]==![] //true

十八、[]===![] //false

十九、[]==!{} //true

二十、![]=={} //false

二十一、{}==![] //Unexpected token ==

二十二、{}==!{} //false

二十三、、++[[]][+[]]+[+[]] == 10

1、拆分左边:++[[]][+[]]右边:[+[]]2、先分析右边+会调用ToNumber方法把ToNumber([])转化成数字,[]是数组对象,因此会调用ToPrimitive方法;空数组先调用valueOf()方法,得到[]不是原始值,继续调用toString()方法,得到""空字符串;ToNumber("")===0,于是右边结果是[0]。3、再分析左边++[[]][0],数组下标的优先级高于一元运算符++,++([[]][0]),数组下标为0也就是第一个元素,++[]得到[]+1,即ToNumber([])+1,而ToNumber([])===0得到0+1,于是得到1。4、两边一起分析得到1+[0],[0]数组先调用valueOf()方法,得到[0]不是原始值,继续调用toString()方法,得到 "0"的字符串。于是1+"0"==="10",判断"10"==10,ToNumber("10")===10。最后++[[]][+[]]+[+[]]==10

 

JavaScript的数据类型的隐式转换