Javascript sum(+)不同的结果windows和linux

时间:2014-04-07 12:42:49

标签: javascript linux

此代码返回不同的结果,为什么?

$.getJSON('/myfile.php?year='+anno , function(data) {
    var listKey = [];
    var values = [];
    var mySum = 0 ;
    $.each(data, function(key, val){
         listKey.push([key]); 
         values.push(val);
         mySum = mySum + val ;                   
    });
});

在Windows console.log(data)上返回:对象{01:3000,02:1500}

在linux console.log(data)上返回:

Object
05: "3000"
06: "1500"
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }
myfile.php:275

在Windows服务器上mySum = 4500

在Linux服务器上mySum = 030001500

我解决了这个问题:

mySum = Number(mySum) + Number(val) ;

现在两个服务器的结果相同,但我不明白为什么会出现这种差异。

1 个答案:

答案 0 :(得分:0)

根据输出我判断问题是val被视为字符串,因为" 0" +" 3000" +" 1500"将返回" 0300015000"。仔细查看正在生成的JSON,以确保不返回字符串 - 您想要总结的数字不会用引号括起来。

至于为什么这只发生在一个操作系统与另一个操作系统上,我认为这是一个红色的鲱鱼。