为什么Math.min([])的计算结果为0?

这个问题在这里已经有了答案:

  • 为什么++ [[]] [+ []] + [+ []]返回字符串“10”? 8个答案

  • 为什么Math.min([])计算结果为0

    因为规格说明如此:

    Math.min使用...将每个参数转换为一个数字...

    ToNumber使用...将对象转换为数字

    ToPrimitive使用...将对象转换为原始值

    [[Default Value]]内部方法根据对象的提示参数将对象转换为基元。

    所有对象的默认提示都是字符串。 这意味着数组被转换为一个字符串,对于[]""

    ToNumber然后根据记录的算法将""转换为0

    Math.min然后采用唯一的参数并根据其算法返回它。


    发生这种情况是因为[]被强制为0

    您可以通过以下电话查看:

    (new Number([])).valueOf(); // 0
    

    因此,调用Math.min([])与调用Math.min(0)它给出0 Math.min(0)相同。


    我相信new Number([])[]视为0的原因是因为:

  • Number(value)构造函数的规范使用ToNumber函数。
  • ToNumber(value)函数的规范说要使用ToPrimitive作为object类型(数组是)。
  • 数组的原始值等于数组加入,例如[]变为""[0]变为"0"[0, 1] "0,1" [0, 1]变为"0,1"
  • 数字构造函数因此将[]转换为"" ,然后将其解析为0
  • 上面的行为是其中有一个或两个数字的数组可以传递到Math.min(...) ,但是更多的数组不能:

  • Math.min([])等于Math.min("")Math.min(0)
  • Math.min([1])等于Math.min("1")Math.min(1)
  • Math.min([1, 2])等于Math.min("1,2") ,它不能转换为数字。
  • 链接地址: http://www.djcxy.com/p/48041.html

    上一篇: Why does Math.min([]) evaluate to 0?

    下一篇: How to specify audience for an OAuth2 access token?