Объявление объекта без установки его по существу ничего не делает. Хотя это не приведет к ошибке, некоторые интерпретаторы будут бросать предупреждение - как и строгий режим, я считаю.
JavaScript не делает это сразу же очевидным. Например, если вы сделаете это:
function Hello() {
this.value1;
}
var h = new Hello;
alert(h.value1);
Оповещение будет читать undefined
. Однако свойство value1
никогда не обращалось к нему - его вообще не существует, потому что вы не указали его значение.
Чтобы не допустить ошибки, JavaScript возвращает undefined
при попытке доступа к объекту, который не существует. Таким образом, вы получите тот же результат, если вы пишете, скажу:
alert(h.property_that_doesnt_exist); //alerts 'undefined'
перебора свойств h
ясно показывает, что свойство value1
не существует:
for (var key in h) {
alert(key + ' = ' + h[key]);
}
Это предупреждает ничего, потому что без свойств будут найдены. Однако, если установить свойство в JS примитивным undefined
, свойство будет существовать:
function Hello() {
this.value1 = undefined;
}
var h = new Hello;
for (var key in h) {
alert(key + ' = ' + h[key]); //alerts 'undefined'
}
Вы можете запустить приведенный выше код здесь: http://jsfiddle.net/Acdmn/
Но нет никаких оснований, чтобы установить свойство/переменная до undefined
. Для того, чтобы создать свойство с «пустым» значением, JavaScript программисты обычно используют null
:
function Hello() {
this.value1 = null;
}
Это дает понять, что собственность была создана намеренно, но вы не готовы дать ей осмысленное значение еще.
Наконец, обратите внимание, что определения собственности работают по-разному от «нормального» (частных) переменных явно установленного с var
(хотя они также являются свойством, в этом случае window
объекта).Если вы пишете:
var foo;
alert(foo);
alert(some_undefined_variable_name);
Первое предупреждение скажет undefined
. Переменная foo
была создана, существует и содержит примитивное значение undefined
(даже если вы не указали его явно). Второе предупреждение, однако, бросить ссылочную ошибку:
ReferenceError: some_undefined_variable_name is not defined
Так JavaScript неумолим об использовании неопределенных переменных, но это не волнует, если вы пытаетесь использовать неопределенное свойство.
Вы никогда не создаете свойства 'value1' или' value2'. Все, что вы делаете, - это * читать * их, что не удастся (потому что их не существует), а 'undefined' будет возвращен. Если вы присвоите им значение, то они будут созданы. Простой пример: 'var obj = {}; obj.foo; obj.bar = 42; console.log (OBJ); '. –
Спасибо за ответ. Но если объявить свойство недостаточно, то каким способом было бы создавать свойства в js без его инициализации. – user1461826
Вы не можете объявлять свойства, как вы объявляете переменные (т. Е. 'Var foo;'). Свойства создаются только в том случае, если вы присваиваете им значение. Это значение может быть «null» или «undefined». –