Операция сравнения === не работает в Chrome?

Я не знаю почему, но приведенный ниже код работает в 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 !
}

Вот как #input-status определяется в html:

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

В Chrome код работает, только если я заменяю === на == .

Любые идеи ?


person delphirules    schedule 12.02.2014    source источник
comment
Сделайте console.log(typeof status); перед оператором if - какой тип говорит Chrome?   -  person Anthony Grist    schedule 12.02.2014
comment
Вы уверены, что хром успешно анализирует строку? Потому что это, кажется, проблема.   -  person ppoliani    schedule 12.02.2014
comment
Я не думаю, что ваша оценка верна.   -  person Pointy    schedule 12.02.2014
comment
Не забудьте указать систему счисления --parseInt($("#input-status").val(), 10);   -  person Elliot Bonneville    schedule 12.02.2014
comment
Chrome говорит, что статус - это строка, но если я вызываю parseInt, почему это не целое число?   -  person delphirules    schedule 12.02.2014
comment
@delphirules это действительно ваш код точно?   -  person Pointy    schedule 12.02.2014
comment
Да. Вот мой код для поля состояния ввода: ‹тип ввода=скрытый идентификатор=имя состояния ввода=значение состояния ввода=00›   -  person delphirules    schedule 12.02.2014


Ответы (1)


Я не уверен, почему это происходит, но я могу воспроизвести это так:

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, чтобы сделать их локальными

person damian    schedule 12.02.2014
comment
Отлично, добавление 'var' решает эту проблему! :) - person delphirules; 12.02.2014
comment
@delphirules Рад, что смог вам помочь. - person damian; 12.02.2014
comment
Да, в Chrome всякий раз, когда вы устанавливаете для глобальной переменной status/window.status любое значение window.status = {}, оно преобразуется в строку {value: "[object Object]", writable: true, enumerable: true, configurable: true} jsFiddle, урок: не используйте глобальные переменные, используйте var, чтобы сделать их локальными. - person Xotic750; 12.02.2014
comment
Просто хочу повторить, что урок, который вы должны извлечь из этого: никогда не используйте неявно определенные глобальные переменные. Всегда используйте var и по возможности не используйте глобальные переменные. - person Colin DeClue; 12.02.2014