Home

非人题库

# Set 值为对象的时候,除非指向同一个引用,否则被认为是不同值

const mySet = new Set();
mySet.add( {foo: 'bar'} )
mySet.has( {foo: 'bar'} ) //false

因为

{}==={} //false

# Set 值为NaN的时候, NaN 被认为是相同的,尽管 NaN !== NaN

# 有一段代码生成随机颜色的代码 "#"+((1<<24)*Math.random()|0).toString(16), 如何理解 1<<24|0

1<<24,先把1转为2进制,1的二进制还是1,然后向左移动24位,那么也就代表二进制1后面有24个0。换算成十进制就是16777216。

同理,计算5<<2,5的二进制是101,左移两位,那就是10100,将二进制10100转换为10进制,就是20,所以5<<2值就为20。

也可以理解左移运算符就是*2的n次方,5 << 2 = 5 * 2^2 = 20

|0 单竖杠可以进行取整运算,只保留整数部分,小数部分舍掉。原理是转换为2进制之后相加得到的结果 3|4转换为二进制之后011|100 相加得到111=7