比较操作===无法在Chrome上运行?

时间:2014-02-12 16:24:32

标签: javascript google-chrome firefox

我不知道为什么,但下面的代码适用于Firefox但不适用于Google Chrome,为什么?这应该是标准的JS。

status = parseInt($('#input-status').val());
// status field is exactly equals to 0
if (status === 0) {
// do something, in Firefox the code reaches here, in Chrome NOT !
}

以下是如何在html中定义#input-status:

<input type="hidden" id="input-status" name="input-status" value="00">

在Chrome中,代码仅在我替换=== by ==。

时才有效

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我不确定为什么会这样,但我可以像这样重现:

jsfiddle

status = parseInt($('#input-status').val(), 10);
test = parseInt($('#input-status').val(), 10);

console.log(typeof status); // string
console.log(typeof test); // number

我猜status是浏览器预定义的,无法解析。 要使其工作,请使用var在当前范围中定义新变量:

var status = parseInt($('#input-status').val(), 10);

if (status === 0) {
    // this also works in chrome
}

修改

console.log(window.status === status); // true

似乎status是对window.status对象的引用,它改变了浏览器中的状态栏。 而且无法将其解析为数字。

@ Xotic750指出:

  

是的,在Chrome上,只要您将全局变量status/window.status设置为任意值window.status = {},它就会将其转换为字符串{value: "[object Object]", writable: true, enumerable: true, configurable: true} jsfiddle课程:不要使用全局变量变量,使用var使它们成为局部范围