本文中波及到的常识,很多都是比拟冷门,在理论编码中你可能用不到,但保不准有些面试官可能会问到,或者你能够拿来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。
临时想到这些,前面有补充再更新。如有疑难,欢送评论区探讨。