xiaoxiaosaohuo/Note

JS隐式类型转换

Opened this issue · 0 comments

最近比较费解这个隐式类型转换,还是有必要记录一下。

js就是个小婊砸

上例子

"1" + 2;    // "12"
1 + "2";    // "12"
1 + 2 + "3";    // "33"

Javascript 对操作顺序非常敏感,加法运算是自左向右的,因此它等同于下面的表达式:
(1 + 2) + "3";    // "33"

if (1 == true) {
    alert("true");
} else {
    alert("false");
}
x y result
bool any 先把x转化为Number,(0,1)然后再比较
Number string 会把x转化为数字 然后比较
Number Object 调用valueOf 方法将y转换为数字,然后进行比较。

以上x和y顺序可以调换

在JS中 空字符串、数字0、false、null、undefined 和 NaN 这 6 个值为假之外,其他所有的值均为真值。

isNaN() isNaN() 方法自带隐式类型转换,该方法在测试其参数之前,会先调用 Number() 方法将其转换为数字。

建议在所有使用条件判断的时候都使用全等运算符 === 来进行条件判断。全等运算符会先进行数据类型判断,并且不会发生隐式类型转换。