javascript奇怪的字符串比较[重复]

Posted

技术标签:

【中文标题】javascript奇怪的字符串比较[重复]【英文标题】:javascript strange comparison of strings [duplicate] 【发布时间】:2014-10-22 21:34:31 【问题描述】:

我有一个 ajax 函数,它可以向某处发送电子邮件并从服务器接收来自类型 = 成功或错误的 json 对象的响应

$("#submit_btn").click(function(event)  
    event.preventDefault();

    var post_data = 
        'email': $("#email").val()
    ;
    $.post( "sendEmail.php", post_data ).done(function(response)
        if(response.type == 'success')
            $("#sentmail").fadeIn("slow")
            setTimeout(function()
                $("#mail").val("Enter your email here");

                $("#sentmail").fadeOut("slow")  
            ,3000);
        
        else
            $("#sentmailfail").fadeIn("slow")
            setTimeout(function()
                $("#mail").val("Enter your email here");

                $("#sentmailfail").fadeOut("slow")  
            ,3000);
        
    ,"json")
);

有趣的是,如果我 console.log(response) 我得到例如 "type":"success","desc":"something" 然后紧接着 console.log( (response.type == "error") ) // TRUE

如果我从响应中获取控制台日志并将其分配给一个变量,例如 a = "type":"success","desc":"something",则 a.type == "error" 为 false。

谁能解释一下?

【问题讨论】:

我的问题是什么时候你会尝试console.log(response)吗? "type":"success" ... type == "error" 嗯...您显然遗漏了一些东西,因为您的示例完全关闭了。如果没有更详尽的示例,就无法判断是什么。 【参考方案1】:

如果console.log(response)的输出是

"type":"success","desc":"something"

那么response 很可能仍然是一个字符串(包含JSON),而字符串没有type 属性:

> "foo".type == "error" // `undefined` is never equal to a string
false

对象在控制台中的外观通常不同:

> console.log("type":"success","desc":"something")
Object type: "success", desc: "something" // in Chrome and Firefox at least

解决方法:先解析字符串:

response = JSON.parse(response);

与 jQuery 相关:

我注意到您打算让 jQuery 为您解析 JSON,但是您将 "json" 传递给了错误的函数。你必须将它传递给$.post(...),而不是.done(...)

$.post("sendEmail.php", post_data, "json").done(...);
// instead of 
// $.post("sendEmail.php", post_data).done(..., "json");

那你就不用手动解析了。


相关:Parse JSON in javascript?

【讨论】:

我尝试手动解析 JSON 但它没有改变任何东西,将“json”移动到 .post 方法也没有做任何事情。我在 if 语句之前 console.log 响应然后我 console.log( response.type ) // "error" 然后我 console.log( response.type != "error" ) // true console.log( response.type.length ) 输出什么? 它输出“找不到未定义的属性长度”。我只写了 JSON.parse(response) 而没有将它分配给任何有问题的东西。谢谢!

以上是关于javascript奇怪的字符串比较[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中使用 == 的相等对象字符串 [重复]

JavaScript 字符串何时不是字符串? [复制]

javascript比较字符串而不区分大小写[重复]

检查 JavaScript 数组中的重复字符串

javascript回调函数

使用 Javascript .find() 似乎做了一些奇怪的强制,我似乎无法确定 [重复]