инициализация JavaScript для неопределенного или нулевого или "" - PullRequest
7 голосов
/ 20 мая 2011

Java-скрипт имеет много ложных значений, когда я начал учиться.У меня есть программа, которая получает значения от службы и загружает в массив, например:

function loadNames() {
    Global.names = // what should I use here? undefined, null, "", 0, {} or anything else
    var lnames = getLNames(); // this is doing some magic
        if ( lnames.length !== 0 ) {
            Global.names = new Array();
            for ( var i = 0; i < lnames.length; ++i)
                Global.names[i] = lnames[i];
    }
}

Я хочу знать правильный способ сброса Global.names.Что здесь наиболее уместно?В коде я хочу проверить только как if ( Global.names )

PS: я не могу просто взять возвращаемое значение в Global.names, так как возвращаемый объект уничтожается позже.Следовательно, мне нужно сделать глубокую копию

Спасибо

Ответы [ 5 ]

12 голосов
/ 20 мая 2011

Взято из JavaScript: хорошие части:

"Оператор if изменяет поток программы на основе значения выражения. Блок then выполняется, если выражение верно. Вот ложьзначения:

  • false

  • null

  • undefined

  • пустая строка ''

  • число 0

  • число NaN

Так что, в принципе, если вы установите свой var для любого из этих значений, вы сможете сделать if (var) {...}

6 голосов
/ 20 мая 2011

Я думаю, вы должны начать GLobal.names = []; и чем просто проверить, если Global.names.length != 0. Если вы хотите сбросить его, просто сделайте его пустым массивом снова.

4 голосов
/ 20 мая 2011

Я думаю, вам лучше инициализировать его как массив и проверить как

if ( Global.names.length )

Кроме того, если вы просто храните строки в массиве, вы можете упростить функцию как

function loadNames() {
  Global.names = getLNames().concat();
}
1 голос
/ 20 мая 2011

Вам не нужно ничего инициализировать.Вы можете сделать:

if (!Global.names) Global.names = [];
// add members to Global.names

Это может быть один в одном утверждении:

Global.names = Global.names : [];

Если вы хотите сбросить его, то:

Global.names = [];

или

delete Global.names;
0 голосов
/ 20 мая 2011

Значение null хорошо, так как вы знаете, что переменная существует, но ей не присвоено значение.Таким образом, вы можете легко увидеть состояние - если оно undefined, то вы забыли объявить его, если оно null, оно было объявлено, но никогда не присваивало значение, а если это Array, то вы можете проверитьдлина оттуда.

...