JavaScript学习理解-自动类型转换

427 阅读3分钟

这是我参与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 就会使用一组复杂而混乱的规则来确定要执行什么样的操作。在大多数情况下,它会尝试将其中一个值转换为另一个值的类型。但是, 如果在运算符的任一侧出现 nullundefined, 则仅当两侧都是 nullundefined 之一时才生成 true

console.log(null == undefined) // ==> true
console.log(nul1 == 0) // ==> false

在实际开发中如果要测试一个值是否具有实际值而不是 nullundefined, 则可以用 == (或 !==)运算符将其与 null 进行比较。

但是往往需要测试某些东西是否指的是精确值 false. 如果使用 ==判断时, 比如表达式如 0 == false"" == false 都是正确的。

这时当我们不希望发生任何自动类型转换时, 就可以用另外两个运算符: ===!==。前者测试一个值是否与另一个值完全相等, 后者测试它们是否不完全相等。 。 建议使用比较运算符 ===, 以防发生自动类型转换。但是如果确定双方的类型相同时,就可以使用 ==运算符

加油

学习, 记录, 积累 是一个漫长的过程! 加油! Buy Less by Know More!