2013-03-11 2 views
2

является mainobj.object_1 = mainobj.object_1 || []Javascript определяется проверка объекта

лучше if (mainobj.object_1 == undefined){ mainobj.object_1 = []; }

в первом примере, казалось бы, Javascript будет переназначить его значение само по себе, но может и нет.

в дополнение к первому примеру переназначает собственное значение самому себе или не делает ничего, что имеет значение?

+0

Я бы первый вариант, потому что он короче и выглядит лучше. – VisioN

+2

Два приведенных вами примера не совсем эквивалентны. Первый предпочтительнее для краткости. – zzzzBov

+0

Первый вариант неверен всегда – hop

ответ

-1

Лучше всего было бы

if(typeof mainobj.object_1 === "undefined"){ 
    mainobj.object_1 = []; 
} 

Но если вы хотите, чтобы проверить нуль слишком, то вы должны добавить проверку нулевой, а также.

Первый подход может привести к чему-то нежелательному. Рассмотрим приведенный ниже пример

var mainobj = {}; 
mainobj.object_1 = false; 
mainobj.object_1 = mainobj.object_1 || []; 
alert(mainobj.object_1); 

Здесь предупреждение читает пустое, а не ложное. Помните 0, false, null, undefined, ""(пустая строка), NaN все ложь в JavaScript.

Кроме того, вы должны иметь в виду, что undefined является не зарезервированное слово в JavaScript

+0

Признак для голосования будет оценен! Я действительно не знаю, что не так с ответом – hop

+1

спасибо. Я думаю, вы объясните это лучше всего. – phpdev76

-2

Оба правильные. Первый - аккуратный. Но во втором, вы должны использовать === вместо ==, чтобы проверить тип.

+0

Почему бы не выбрасывать «типof» для проверки типа? 'if (typeof mainobj.object_1 ==" undefined ")' –

+0

Вы не должны использовать '===', вы пытаетесь проверить значение false, а не «undefined», что является первым примером , – MattDiamant

+0

@RobinvanBaalen На самом деле это не имеет никакого значения, когда определяется 'mainobj'. – VisioN

0

Если вы хотите проверить, не имеет ли смысл его использовать только второй пример, поскольку javascript возвращает false, если объект имеет значение null, пустую строку, ноль, неопределенный, NaN или false.

поэтому его о том, что именно вы хотите от вашего кода.

+0

В каком случае вы порекомендовали бы решение 1? – hop

-1

Они делают почти то же самое.

mainobj.object_1 = mainobj.object_1 || [] 

будет смотреть на mainobj.object_1, чтобы увидеть, если это не undefined и не null, иначе присвоить [];

if (mainobj.object_1 == undefined){ mainobj.object_1 = []; } 

Это собирается сделать тип принуждения к mainobj.object_1 перед сравнением его с undefined. Также, как правило, лучше использовать === строгое сравнение, а не ==, это быстрее и яснее. И если вы должны были использовать жесткие сравнения, вы должны настроить заявление:

if (mainobj.object_1 === undefined || mainobj.object_1 === null){ mainobj.object_1 = []; } 

Что касается кодирования предпочтения, разработчики предпочли бы более короткую форму mainobj.object_1 = mainobj.object_1 || [];, потому что это лаконично и легко читать.

+0

Что произойдет, если mainobj.object_1 == false? – hop

+0

@hop Если вам нужно проверить каждый тип данных и посмотреть, что кто-то еще перепутал ваш объект, тогда есть более важные проблемы. – sweetamylase

+0

Но, определенно, не стоит игнорировать – hop

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