2017-02-17 9 views
3

Кто-то я знаю только учится программировать и наткнулся на это и оставил меня озадачило:Пожалуйста, объясните этот JavaScript галтель

Пожалуйста, откройте консоль (Chrome/Firefox) и введите: var name = ['what', 'the', '...?'];

Я бы ожидать name к быть массивом строк, но:

  • typeof name отображает string вместо Array
  • листинг name переменная выводит строку вместо массива
  • name.length является 13 вместо 3
  • написание name = name.split(',') возвращает массив ["what", "the", "...?"], как ожидалось, но name еще string, а не массив

name является единственным имя переменной, которое, кажется, ведет себя так, или, по крайней мере, я не мог найти другого.

Это просто консольная причуда, ошибка двигателя JavaScript или что?

ПРИМЕЧАНИЕ: вышеуказанное происходит в Chrome и Firefox. IE Edge неожиданно работает, как ожидалось (typeof name - Array и все такое). Не тестировалось в других браузерах.

+1

Попробуйте использовать имя переменной, отличное от 'name'. https://developer.mozilla.org/en-US/docs/Web/API/Window/name – j08691

ответ

6

window.name является глобальной, которая является строкой в ​​DOM.

Обратите внимание, вы можете получить вокруг него, объявив переменную в области видимости функции:

(function() { 
 
    var name = ['foo', 'bar']; 
 
    console.log(typeof name); 
 
})();

А почему IE/Край отличается - его интерпретации спецификации и, вероятно, имеет так было годами. Теперь изменить его было бы изменением.

+1

, так почему в Edge этого не происходит? !! – niceman

+0

@niceman это зависит, если они делают кастинг. –

+0

Ничего себе, спасибо! никогда не думал об этом! – Mtz

 Смежные вопросы

  • Нет связанных вопросов^_^