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

del*_*les 2 javascript firefox google-chrome

我不知道为什么,但下面的代码适用于Firefox,但不适用于谷歌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 !
}
Run Code Online (Sandbox Code Playgroud)

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

<input type="hidden" id="input-status" name="input-status" value="00">
Run Code Online (Sandbox Code Playgroud)

在Chrome中,代码仅在我替换=== by ==时才有效.

有任何想法吗 ?

dam*_*zzi 5

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

的jsfiddle

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

console.log(typeof status); // string
console.log(typeof test); // number
Run Code Online (Sandbox Code Playgroud)

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

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

if (status === 0) {
    // this also works in chrome
}
Run Code Online (Sandbox Code Playgroud)

编辑

console.log(window.status === status); // true
Run Code Online (Sandbox Code Playgroud)

它似乎statuswindow.status对象的引用,它改变了浏览器中的状态栏.并且有意义的是,这不能被解析为数字.

@ Xotic750指出:

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

  • 是的,在Chrome上,只要将全局变量`status` /`window.status`设置为任何值`window.status = {}`,它就会将其转换为字符串`{value:"[object Object]",可写: true,enumerable:true,configurable:true}`[jsFiddle](http://jsfiddle.net/Xotic750/9tvDV/),课程:不使用全局变量,使用[`var`](https:// developer .mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var)使它们在本地作用域. (2认同)