对象的 JavaScript 变量赋值返回字符串



我正在尝试运行以下代码:

var status = null;
$.ajax({
    type: "GET",
    url: "/status",
    success: function(data, textStatus, jqXHR){
        status = data;
    },
    error: function(jqXHR, textStatus, errorThrown){
        console.error(textStatus + ": " + errorThrown);
    }
});

有趣的部分是以下行:status = data;

在调试器中,我可以看到data的值为 Object {7100665: 0, 8800798: 0} 。 jQuery 正确地将从服务器返回的 JSON 字符串解析为对象。

但是,一行之后,全局变量 status 具有值 "[object Object]" 并且行为类似于字符串对象 - 字符串没有按预期分配对象

看起来在正在进行的作业中有一个隐含的typeof调用,这不可能,对吧?还有我不知道的事情吗?ajax 调用的Content-Typeapplication/json

我错过了什么/做错了什么?

status作为

全局变量实际上是window.status,它是一个(非标准)主机对象,可让您在实现它的浏览器中操作状态栏的文本。假定其值为字符串,因此分配给它的任何值都将以静默方式强制转换为字符串。

真正的问题是你用变量污染了全局范围。使用 IIFE,这不会成为问题:

(function() {
    var status = null;
})();

找到了... status是一个保留关键字。

最新更新