Заметил странность:
var name = 0;
name = name || 4;
console.log(name);
console.log(typeof name);
Не понимаю почему выводится 0
и string
, если при сравнении оба числа и 0
вроде как false
. По идее, должно выводиться 4
и Number
.
Но если написать такую функцию:
function new1() {
var name = 0;
name = name || 4;
console.log(name);
console.log(typeof name);
}
new1();
То выводит всё верно: 4
и Number
.
Одна из неочевидных особенностей. у объекта window, есть свойство name
При выполнении данного кода в глобальном контексте, вместо переменной используется это свойство, так как при попытке определить переменную в глобальном контексте, идет попытка добавления одноименного поля в объект window.
Так как в этом объекте уже есть свойство name для него просто вызывается сеттер, и ему записывается указанное значение.
Далее в условии уже проверяется не число 0, а строка "0", которая не эквивалент false.
console.log(window.name)
var name = 10;
console.log(window.name, name, window.name === name);
Для обхода можно так же воспользоваться объявлением переменной с помощью оператора let, в этом случае не происходит добавления в глобальный объект
let name = 0;
name = name || 4;
console.log(name);
console.log(typeof name);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Помогите, пожалуйста, разобраться со скроллбарамиИмеется многоуровневое меню навигации слева id="menu" и лента с записями
Нашли вот такой плагин BrowserClosureNotice Но попытки заставить работать не увенчались успехом