为什么这些JavaScript对象列表属性返回错误的值?

时间:2016-01-25 07:01:45

标签: javascript object properties

我不明白为什么下面的代码会返回看似错误的值(150而不是100):

var price = {
  33427009000001024: 100,
  33427009000001025: 150,
  33427010000001026: 200
};
alert(price[33427009000001024] + "," + price["33427009000001024"]);

显示的值:150,150

我通过在引号中包含对象属性来修复它:

var price = {
  "33427009000001024": 100,
  "33427009000001025": 150,
  "33427010000001026": 200
};

但是我不明白是否真的需要/需要引号,为什么我没有得到错误而只是错误的值?

2 个答案:

答案 0 :(得分:4)

您的整数值大于Integer Max-Value

因此,它会四舍五入到相同的值

33427009000001024 == 33427009000001025 // outputs true
33427009000001024 === 33427009000001025 // outputs true

答案 1 :(得分:1)

数字在JavaScript中的精确度有限(嗯,任何其他语言也是如此)。因此,在这种情况下,33427009000001025将四舍五入为33427009000001024,并使用150覆盖原始值100。

将其放入字符串会使其精确,因为它基本上是字符串,并且它可以包含任意数量的字符(最多4GB)。