“Wat”演讲中令人费解的 JavaScript 行为
CodeMash 2012 的“Wat”演讲强调了 JavaScript 中的一些特殊行为,它是值得探索它们以了解背后发生的事情
[] []
与空数组一起使用的加法运算符 ( ) 将操作数转换为基元并将它们连接起来。由于数组的默认原始值为空字符串,因此 [] [] 的结果也是空字符串。
[] {}
JavaScript 中的对象有一个 toString()调用时返回“[object Object]”的方法。因此,[] {} 会生成一个对象,特别是字符串“[object Object]”。
{} []
在语句中使用时,{} 会被解析作为一个空块,因此返回未定义。该运算符将未定义的操作数强制转换为数字,导致 {} [] 为 0(而“Wat”谈话提到它应该为 NaN)。
{} {}
类似到 {}[] 时,第一个 {} 被解析为空块,导致未定义。但是,该运算符无法将字符串“[object Object]”(第二个 {} 的 toString() 值)强制转换为数字,从而导致 NaN.
Array(16).join ("wat" - 1)
ToNumber() 将 "wat" - 1 转换为 NaN,因为从字符串中减去数字会得到非数字 价值。 ToPrimitive() 然后将 NaN 转换为字符串“NaN”,在连接数组元素时重复 16 次。
结论
这些看似奇怪的行为源于 JavaScript 的原始转换规则以及与数组和对象相关的特定方法。通过了解这些底层机制,您可以避免意外结果并充分利用 JavaScript 的强大功能。
以上是为什么 JavaScript 在这些奇怪的算术运算中会产生意想不到的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!