angular.js解析整数错误

angular.js parsing integer incorrectly

本文关键字:整数 错误 js angular      更新时间:2023-09-26

我正在使用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无法正确解析整数响应

JavaScript中没有纯整数变量

相反,我们所拥有的只是Number,它们被存储为IEEE754浮点值。根据ECMAScript标准,我们有:

注意,所有大小不大于2^53的正整数和负整数都可以用数字类型表示(实际上,整数0有两种表示,+0和−0)。

请注意,这并不意味着在JavaScript中可表示的最大整数是2^53,而是意味着一旦大于这个整数,就只能表示一些整数。一旦您用完了IEEE754浮点表示的53位尾数,整数之间就会开始出现间隙。

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

相关文章: