# 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