有没有人知道为什么以下会返回第三项的值+ 1而不是只返回项目的正确值?
JSFiddle:http://jsfiddle.net/gz4gA/
var items = [10150778347353933, 95698693940, 10151139500303463, 337394396325739, 181838311261, 186661577450, 131239636262, 408877845803303, 130260147046659, 10151850964430652, 190553376302, 256062744215, 73099117435, 30571361895, 85358203371, 133621058800, 67899501771, 422515109312, 56271008850, 107997326726, 382312857465, 144163385597840, 10150882307310061, 184244804960462, 63953746442, 114588455254586, 201992215550, 401799715673, 287217811299764, 96668113887, 106824841365, 130084127023410, 186061480932, 60351005403, 209693813195, 10150593297330601, 319622191193, 68686268942, 290590784383, 63467856465, 470235003273, 127564720953, 127437064077, 102351319089, 113530295368, 82102942060, 290699835908, 81445359355, 137490940846, 119104781632, 415115129332, 120520318032430, 142666108227, 146711457500, 344723925588563, 239108779476988, 121853939741, 109322101963, 54456613147, 473850413696, 10150329755772674];
console.log(items[2]);
答案 0 :(得分:4)
JavaScript编号是64位浮点值。可以精确表示的最大整数值是2 53 或9007199254740992.大于该值的数字(包括数组的3 rd 元素)仅表示近似值。例如,请参阅ECMA 262-5, section 8.5。
答案 1 :(得分:2)
根据此回答https://stackoverflow.com/a/307200/816620,javascript可以代表所有整数的范围的顶部是:9007199254740992
,它小于您的10151139500303463
。所以,你的号码太大了。
如果这些是项目代码而不是你真正需要用作数字的东西,那么也许你应该将它们存储为字符串,而不是数字。