Почему переключение аргументов == в консоли меняет вывод?
Если я открою консоль браузера (проверено в Chrome/Firefox) и введите:
null == {}
Я получил:
ложный
Однако, если я коммутирую оба аргумента ==
оператор и вместо этого введите:
{} == null
Я получил:
Uncaught SyntaxError: Неожиданный токен ==
Образ:
- Почему это происходит?
- Почему это происходит только в консоли, а не тогда, когда браузер выполняет скрипт на HTML-странице?
РЕДАКТИРОВАТЬ:
В то время как вопрос 35812626 обращается к этому и объясняет причину как JS, анализирующий {}
в качестве блока кода используется оператор тройного равенства (строгое сравнение) ===
не двойные равны ==
, Как указывает пользователь ниже, за блоком кода определенно может следовать ==
не вызывая синтаксическую ошибку:
{} == {} // false
Почему это работает, а мой пример нет?
2 ответа
Я думаю, потому что переводчик интерпретирует {}
как блок кода, а не как объект.
так твой код {} == null
оказывается начало и конец блока, а затем оператор начинается с ==
что определенно является синтаксической ошибкой.
но если вы можете попробовать ({} == null)
Я думаю, что это должно работать нормально.
и как указано @dhaker {}=={}
возврате false
не ошибка.
и я обнаружил, что есть несколько сценариев, возвращающих результат и мало получающих ошибку.
следующие ошибки:
{}==null //Uncaught SyntaxError: Unexpected token ==
{}==1 //Uncaught SyntaxError: Unexpected token ==
{}==0 //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}==false //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}=='' //Uncaught SyntaxError: Unexpected token ==
{}=='hi' //Uncaught SyntaxError: Unexpected token ==
{}==(new Object) //Uncaught SyntaxError: Unexpected token ==
следующие возвращают результат без ошибки:
{}=={} //false
{}==function(){} //false
так что я думаю, это как-то связано с тем, как Javascript компилируется или интерпретируется браузерами.
для более подробного ответа, пожалуйста, проверьте следующий ответ.
Я тестировал на сафари это не так.
NULL является примитивной переменной, и NULL может быть слева.
Но {} для javaScript это пространство имен. Используется для создания глобального объекта.
Ответ прост: нет смысла использовать {} с операторами равенства.
Обновлено:
Это так ясно:
Все, что в javascript, что идет с {не имеет назначения.
Давай попробуем сказать:
{x: null}
а что вы получите?
Ничего такого. Можете ли вы снова получить доступ к этому объекту? Нет.
console.log( null == {} );
console.log( {} == null );
console.log( null === {} );
console.log( {} === null );
// Also
var object1 = {'key': 'value'}
var object2 = {'key': 'value'};
console.log(object1 === object2); //false
console.log({} === {}); //false
console.log({} == {}); //false
({}) == null; // little hack ;) false
// {} == null; syntax error !
(typeof {}) == (typeof {});
var A = {};
var B = {};
(typeof A) === (typeof B);
// console.log( (A instanceof "object" ) );
console.log( typeof A );
// This is only correct
console.log(typeof A === typeof B)
console.log(typeof {} === typeof {})
Я пробую эту глупую вещь:
{ 'Тест':0}.hasOwnProperty('тест')
и я получаю такой же персонал ( syntaxError) . Не используйте это так!