关于javascript:盘点js中那些诡异的结果

40次阅读

共计 1040 个字符,预计需要花费 3 分钟才能阅读完成。

本文中波及到的常识,很多都是比拟冷门,在理论编码中你可能用不到,但保不准有些面试官可能会问到,或者你能够拿来 zb。

1. typeof null

这个是历史遗留的 bug,typeof null 值为 ”object”

2. null == undefined

值为 true

3. -0 === +0

值为 true,然而 Object.is(-0, +0)为 false

4. Infinity * 0

值为 NaN,相似的还有 Infinity / Infinity = NaN,Infinity % 0 = NaN,Infinity + (-Infinity) = NaN,

5.‘a’< 3

值为 false,这是因为字符串和数字作比拟时,字符串会转化为数值,而 ’a’ 转化后的值为 NaN,而 NaN < 3 的值为 false,但你认为这样 ’a’ >= 3 就为 true 了吗?no,’a’ >= 3 也为 false,这是因为有一个规定,即任何关系操作符在波及比拟 NaN 时都返回 false。

6. NaN == NaN

值为 false,NaN 不是示意某一个具体的数。

7. window.isNaN != Number.isNaN

值为 true,window.isNaN 在晚期判断时存在一个 bug,比方 window.isNaN(‘a’) = true,起初在 es6 中修复了这个 bug,Number.isNaN(‘a’) = false。

8. typeof Function.prototype

值为 ”function”,因为 Function.prototype 是原生办法。

9. Array.isArray(Array.prototype)

值为 true,数组的原型也是数组

10. function fun () {}; fun instanceof Function

值为 true,那 fun instanceof Object 呢?值也为 true。对于 Object 和 Function 的前世今生,前面会再写一篇文章来阐明。

11. Math.max(‘a’, ‘b’)

值为 NaN

12. [] == ![]

值为 true,这个题目有一次在口试的时候被考到过。剖析一下,这里波及到隐式类型转换,首先![]=false, 变为[] == false,如果有一操作数为布尔值时,将其转化为 number,则变为[] == 0,而后将右边也转换为 number,右边是对象,先调用 valueOf 办法,转换的值为[],不是原始值,所以持续调用 toString 办法,失去的值为空字符串 ””,转换为 number 为 0,最终失去 0 == 0。

临时想到这些,前面有补充再更新。如有疑难,欢送评论区探讨。

正文完
 0