lodash.js createSet函数的疑问

新手上路,请多包涵

题目描述

在看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)
  : () => {}
阅读 1.5k
1 个回答

对于 Set 来说, -0+0 是有区别的, 但在 es2015 后规范指定 -0 和 +0 相等. 存在浏览器兼容问题. 如果是遵循标准的,则 new Set([,-0]))[1] 返回 0, 否则会返回 -0, 1 / -0 的结果为 -Infinity 不等于 Infinity, 此时使用空对象来作为标准 Set 的替代实现,

推荐问题