这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
前文我们学习了JavaScript
中的知识点小结:
本文来学习 JavaScript 中的 自动类型转换, 也是有一些需要注意的小 bug 的
JavaScript 自动类型转换(Type conversion)
先看下面简单的代码:
console.log('621' - 1) // 620
console.log('621' + 1) // 6211
console.log(false == 0) // true
这里面的小"bug"就是 自动类型转换了, 看些 MDN 的解释:
类型转换(或类型变换;英文:Type conversion, typecasting)是指将数据由一种类型变换为另一种类型。在编译器自动赋值时,会发生隐式转换,但在代码中,也可以用一些写法强制要求进行显式转换。例如:在表达式 5 + 2.0 中,整数 5 被隐式转换为浮点数,但 Number("0x11") 和 "0x11" 则被显式转换为数字 17。
当对一些字符串比如 "这是字符串会被转换成??"
或者 undefined
, 将得到值 NaN
。当对 NaN
进行进一步算术运算还是会继续产生 NaN
...所以在这些地方看到意想不到的结果时,可以留意一下是否有自动类型转换了。
null 和 undefined
JavaScript 中 null 和 undefined 还是比较特殊的
当使用 ==
比较相同类型的值时,结果很容易预测: 当两个值相同时,应该得到 true
, 只有 NaN
除外。但是在类型不同时进行比较, JavaScript
就会使用一组复杂而混乱的规则来确定要执行什么样的操作。在大多数情况下,它会尝试将其中一个值转换为另一个值的类型。但是, 如果在运算符的任一侧出现 null
或 undefined
, 则仅当两侧都是 null
或 undefined
之一时才生成 true
。
console.log(null == undefined) // ==> true
console.log(nul1 == 0) // ==> false
在实际开发中如果要测试一个值是否具有实际值而不是 null
或 undefined
, 则可以用 ==
(或 !==
)运算符将其与 null
进行比较。
但是往往需要测试某些东西是否指的是精确值 false
. 如果使用 ==
判断时, 比如表达式如 0 == false
和 "" == false
都是正确的。
这时当我们不希望发生任何自动类型转换时, 就可以用另外两个运算符: ===
和 !==
。前者测试一个值是否与另一个值完全相等, 后者测试它们是否不完全相等。
。
建议使用比较运算符 ===
, 以防发生自动类型转换。但是如果确定双方的类型相同时,就可以使用 ==
运算符
加油
学习, 记录, 积累 是一个漫长的过程! 加油! Buy Less by Know More!