在Javascript中,为什么空扩散阵列Infinity的最小值?

时间:2017-03-27 18:26:27

标签: javascript arrays ecmascript-6

我使用生成器创建对象,如下所示:



function* Thing() {
  var x = 0;
  while (x < 3) {
    var rules = [{arr: [1, 2, 3]}, {arr: [1]}, {arr: []}];
    yield {
      arrayMinimum: Math.min(...rules[x].arr)
    }
    x++
  }
}

var create = Thing();

console.log(create.next().value)
console.log(create.next().value)
console.log(create.next().value) // { arrayMinimum: Infinity } ???
&#13;
&#13;
&#13;

为什么Math.min(...[]) === Infinity

奖金混淆:Math.max(...[]) === -Infinity ???

1 个答案:

答案 0 :(得分:10)

这是因为(...[])指定的参数列表是参数的空列表 - 即,您正在执行Math.min()而没有参数。

EMCAScript spec for Math.min states

  

如果没有给出参数,则结果为+∞。

(并且,毫不奇怪,它有a similar statement for Math.max。)