2014-12-12 1 views
3

Почему вы не можете назвать переменную в JS «name»?JavaScript - Почему я не могу назвать переменную «имя»?

var wrapper = document.createElement("div"); 
var name = document.createElement("div"); 

wrapper.appendChild(name); // TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. 

document.body.appendChild(wrapper); 

Когда я набираю «имя» в консоли на новой вкладке, он возвращает пустую строку?

Я использую Chrome.

+3

Вы должны иметь возможность вызывать переменную 'name'. Вызов 'name' в консоли аналогичен доступу к свойству' name' 'window'. –

+0

Internet Explorer? – tadman

+0

Прекрасно работает для меня в Chrome. Какой браузер вы используете? – DoctorMick

ответ

6

Потому что window.name является магическим свойством объекта window и может содержать только строки (любой объект, включая массивы, принуждается к примитивному типу и становится чем-то вроде "[Object Object]"). Переменные, определенные в глобальной области видимости, становятся свойствами глобального объекта и могут вызывать конфликты.

У вас может быть переменная name в любом неглобом пространстве. Простое обходное решение может заключаться в том, чтобы обернуть ваш код в выраженном функциональном выражении (IIFE).

(function(){ 

    var wrapper = document.createElement("div"); 

    var name = document.createElement("div"); 


    wrapper.appendChild(name); // workd 


    document.body.appendChild(wrapper); 

}()); 
+2

Это правильный ответ. Я также добавил бы, что параметр 'window.name' автоматически преформирует кастинг на тип String, поэтому установка' window.name' приведет к чему-то вроде 'window.name = [object HTMLDivElement]'. – dfsq

+0

Я добавил эту информацию. TIL: 'window.name' может содержать ** только ** строки, а не другие примитивные типы. – Ginden

3

«имя» является предопределенным название зависит от реализации объектов JavaScript, методы или свойства, вы должны избегать, чтобы использовать это в качестве имени для переменной, хотя это не является зарезервированным словом и может работать в некоторых браузерах

-2

name является зарезервированным словом, среди многих других слов. Вы можете увидеть full list here, чтобы увидеть все зарезервированные слова.

Они действуют как разные функции, методы и т. Д. Например, вы не можете назвать функцию «функция».

+1

'name' не является зарезервированным словом. – Ginden

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