⚠️ 这是一个低版本的bug,V8(<=5.5),或则Node.js(<=7)。
// Declare a class which extends null class Foo extends null {} // -> [Function: Foo] new Foo instanceof null // > TypeError: function is not a function // > at … … … |
[1, 2, 3] + [4, 5, 6] // -> '1,2,34,5,6' |
[1, 2, 3] + [4, 5, 6] // 调用 toString() [1, 2, 3].toString() + [4, 5, 6].toString() // 字符串拼接 '1,2,3' + '4,5,6' // -> '1,2,34,5,6' |
let a = [,,,] a.length // -> 3 a.toString() // -> ',,' |
数组相等匹配非常恐怖末尾分号(Trailing commas)(又叫做final commas)在添加新元素、参数或则属性时候很有用。如果你想增加一个新的属性,并且前一行末尾有使用分号,你可以直接在新的一行添加而不用修改前一行。这可以让版本控制的diff操作更加清晰,代码更少出问题。- Trailing commas at MDN
[] == '' // -> true [] == 0 // -> true [''] == '' // -> true [0] == 0 // -> true [0] == '' // -> false [''] == 0 // -> true [null] == '' // true [null] == 0 // true [undefined] == '' // true [undefined] == 0 // true [[]] == 0 // true [[]] == '' // true [[[[[[]]]]]] == '' // true [[[[[[]]]]]] == 0 // true [[[[[[ null ]]]]]] == 0 // true [[[[[[ null ]]]]]] == '' // true [[[[[[ undefined ]]]]]] == 0 // true [[[[[[ undefined ]]]]]] == '' // true |
Number() // -> 0 Number(undefined) // -> NaN |
parseInt('f*ck'); // -> NaN parseInt('f*ck', 16); // -> 15 |
// parseInt('Infinity', 10) // -> NaN // ... parseInt('Infinity', 18) // -> NaN... parseInt('Infinity', 19) // -> 18 // ... parseInt('Infinity', 23) // -> 18... parseInt('Infinity', 24) // -> 151176378 // ... parseInt('Infinity', 29) // -> 385849803 parseInt('Infinity', 30) // -> 13693557269 // ... parseInt('Infinity', 34) // -> 28872273981 parseInt('Infinity', 35) // -> 1201203301724 parseInt('Infinity', 36) // -> 1461559270678... parseInt('Infinity', 37) // -> NaN |
parseInt(null, 24) // -> 23 |
首先,null被翻译为字符串”null”。”n”在24进制中对于23。– 更多请参考“parseInt(null, 24) === 23… wait, what?” at StackOverflow。
parseInt('n', 24) // -> 23 |
parseInt('06'); // 6 parseInt('08'); // 8 if support ECMAScript 5 parseInt('08'); // 0 if not support ECMAScript 5 |
parseInt({ toString: () => 2, valueOf: () => 1 }) // -> 2 Number({ toString: () => 2, valueOf: () => 1 }) // -> 1 |
true + true // -> 2 (true + true) * (true + true) - true // -> 3 |
Number(true) // -> 1 |
+true // -> 1 |
如果参数为true,返回1. 如果参数为false,返回+0.
这就是为什么我们布尔类型的值(true,false)可以和数字相加。
// valid comment <!-- valid comment too |
typeof NaN // -> 'number' |
typeof [] // -> 'object' typeof null // -> 'object' // 但是 null instanceof Object // false |
Object.prototype.toString.call([]) // -> '[object Array]' Object.prototype.toString.call(new Date) // -> '[object Date]' Object.prototype.toString.call(null) // -> '[object Null]' |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |