angular.js解析整数不正确

时间:2014-10-07 04:26:09

标签: javascript angularjs

我正在使用angular来对我自己的REST API进行AJAX调用。

$scope.authenticate = function() {
    $http({
        headers: httpHeaders,
        url: '/something/',
        method: "POST",
        data: { 'userId' : $scope.userId, 'password': $scope.password },
        cache: false
    })
    .success(function(response, status) {
        console.log(response);
        var ourstring = JSON.stringify(response);
        console.log(ourstring);
        $scope.authenticate_data = response;
        $scope.sessionId = response.sessionId;
        $scope.cookie = response.cookie;
        $scope.message = "You have successfully authenticated."
    });
}

不知何故,angular不正确地解析整数,并且在Chrome检查器的网络选项卡中,调用显示以下内容:

请求选项卡

{"sessionId": 115053508782199126, "cookie": "JSESSIONID=E61DD3443AE9E119060A637CF039936B; Path=/webservice"}

预览标签(存储在范围内的值)

{"sessionId":115053508782199120,"cookie":"JSESSIONID=E61DD3443AE9E119060A637CF039936B; Path=/webservice"}

当我将整数作为字符串包装在后端时,一切都很好。但是,我真的想了解导致此错误的原因。

相关链接:Angular $resource does not parse correctly an integer response

1 个答案:

答案 0 :(得分:4)

在JavaScript中没有纯粹的整数变量。

相反,我们所有的都是Number,它们存储为IEEE754 floating-point values。从the ECMAScript standard开始,我们有:

  

请注意,幅度不大于2 ^ 53的所有正整数和负整数都可以在Number类型中表示(实际上,整数0有两个表示,+ 0和-0)。

请注意,意味着JavaScript中可表示的最大整数是2 ^ 53,而是一旦大于此值,则只能表示一些整数。一旦你耗尽了IEEE754浮点表示的53位尾数,整数之间就会出现间隙。

您的示例会话ID 1150535087821991262^53大得多,并且它最接近的整数浮点值为115053508782199120。所以,你需要使用字符串。