题目描述
在看lodash源码的时候看到createSet函数时存在这样一个判断 Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY
不太理解后半段的(1 / setToArray(new Set([,-0]))[1]) == INFINITY
的意思
相关代码
const createSet = (Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY)
? (values) => new Set(values)
: () => {}
对于
Set
来说,-0
和+0
是有区别的, 但在 es2015 后规范指定 -0 和 +0 相等. 存在浏览器兼容问题. 如果是遵循标准的,则new Set([,-0]))[1]
返回0
, 否则会返回-0
,1 / -0
的结果为-Infinity
不等于 Infinity, 此时使用空对象来作为标准Set
的替代实现,