2010-11-26 3 views
8

Я просто хочу увеличить свои основные знания javascript.Что это в javascript: "var var1 = var1 || []"

Иногда я вижу это заявление, но я не знаю, что он делает:

var var1 = var1 || []; 

Что это значит, и/или то, что для него, и как вы его используете?

спасибо.

+0

Это интересный способ достижения цели. Но почему это было бы случайным образом превратить нуль в первую очередь? – TheLQ 2010-11-26 00:42:30

+0

@TheLQ: Это может быть необязательный параметр. – SLaks 2010-11-26 00:43:08

+3

@SLaks: но тогда ему не понадобится `var`, правильно? – cambraca 2010-11-26 00:44:36

ответ

3

Логические операторы в JavaScript фактически оценивают один из двух объектов. Когда вы используете a || b, он оценивается как b, если a является ложным, или a, если a - это правда. Таким образом, a || [] будет a, если a - любое значение, которое является истинным, или [], если a - любое значение, которое является ложным.

Это гораздо более очевидным использовать if (!a) { a = [] };

1

Оператор || оценивает первый из своих операндов, который является «правдивым».

[] - пустой массив. ([ "Hi!" ] представляет собой массив из одной строки)

Поэтому выражение x || [] вычисляется в x, если это «truthy» или пустой массив, если это не так.

Это позволяет указать параметр var1.

7

Он присваивает пустой массив var1, если его логическое представление является ложным (например, оно не было инициализировано).

5

В принципе, если var1 является NULL или false, var1 будет установлен на пустой array.

11

В принципе, он видит, существует ли переменная var1 и является «правдой». Если это так, он присваивает локальной переменной var1 значение; если нет, ему присваивается пустой массив.

Это работает, потому что оператор JavaScript || возвращает значение первого правдивого операнда или последнего, если ни один из них не является правдивым. var1 || var2 возвращает var1, если это правда, или var2 в противном случае.

Вот некоторые примеры:

var somevar; 
somevar = 5 || 2; // 5 
somevar = 0 || 2; // 2 
somevar = 0 || null; // null 

Значения, которые не являются "truthy": false, 0, undefined, null, "" (пустая строка), и NaN. Пустые массивы и объекты считаются правдивыми в JavaScript, в отличие от некоторых других языков.

3

Javascript или (||) работает немного по-другому с некоторыми другими языками, он возвращает первое «правдивое» значение вместо логического. Это используется в этом случае, чтобы сказать: «Задайте значение var1 равным var1, но если это значение« falsey », установите значение []».

Это часто используется для установки значения по умолчанию для переменной, которая может быть или не быть уже установлена, например, аргумент функции.

1

Оператор присваивает пустому массиву переменной var1.


развернутый ответ и объяснение:

Это происходит потому, что var1 не инициализируется в то время.Неинициализированное значение является ложным.

принять это заявление:

не
var1 = var1 || []; 

Если var1 не инициализируется становится пустой массив, то, если это пустой массив ничего не происходит, как его присваивается пустой массив, если var1 является false, null, или any other value that javascript things of as false, он становится пустым массивом, если var1 - это что-то другое, ничего не происходит, поскольку он присваивается самому себе. (спасибо pst за ссылку).

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

1

В то время как это было указано как «быть глупым заявление», я представляю следующие два счетчика:

(Просто, чтобы держать людей в напряжении и укрепляющие некоторые "мелкие детали" из JavaScript.)

1)

var переменная уже local. Например.

function x (y) { 
    var y = y || 42 // redeclaration warning in FF, however it's "valid" 
    return y 
} 
x(true) // true 
x()  // 42 

2)

var является функцией шириной аннотации (она «поднимается» к вершине), а не декларация на месте использования.

function x() { 
    y = true 
    var y = y || 42 
} 
x()  // true 

Мне не нравится код, как любой из предыдущих, но ...

Из-за подъем, и позволил повторно декларации, код в посте имеет семантику:

var var1 
if (!var1) { 
    var1 = [] 
} 

Редактировать Мне неизвестно, как «строгий режим» в Ed.5 влияет на вышеизложенное.

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