2014-02-21 5 views
2

Closure(Script) implementation in JavaScript called "wisp" имеет этот фрагмент:Что это означает код ([1, 2, 3] || 0) [0]

(get [1 2 3] 1) ; => ([1, 2, 3] || 0)[0] 

, что означает, что код струйка компилирует к этому в JavaScript:

([1, 2, 3] || 0)[0] 

Но почему || 0 часть там?

+1

Вы хотите понять синтаксис этого или логики? – matewka

+0

Цель, возможно, – exebook

+0

Возможный дубликат [Что делает || оператор do?] (http://stackoverflow.com/questions/830618/what-does-the-operator-do) –

ответ

5

Я думаю, что вместо того, чтобы писать буквальное массив, вы можете отправить его в переменную:

(get x 1) ; 

Так || 0 используется в случае x является null или undefined.

В JavaScript || не возвращает логическое значение, оно возвращает 1-ое значение, если оно «правдиво», а второе, если 1-й «ложный».

0[0] возвращение undefined как раз [][0]. 0 является одним менее символом, чем [], так что, вероятно, поэтому они сделали || 0 вместо || [].

+0

' ||, не возвращает логическое значение, оно возвращает 1-ое значение. Это просто сбило меня с ног прямо сейчас. – exebook

+1

Да, это одна из странных вещей о JavaScript (вот документы: https://developer.mozilla.org/en -US/Docs/Web/JavaScript/Справочные материалы/Операторы/Logical_Operators). Если вы выполняете '' abc '|| «xyz'', вы получите' 'abc''. –

2

Обычно он используется для указания значения по умолчанию, если первая часть имеет значение null/undefined/false.

Например, рассмотрим следующий код:

var a = 1; 
var b; 

var x = a || 0;//if a is true use a, otherwise use 0 
var y = b || 0;//if b is true use b, otherwise use 0 

Значение x будет 1, потому что 1 является truthy значение и, следовательно, становится значением, которое используется. тогда как y будет 0, потому что значение b не определено (значение ложности), поэтому вместо этого используется 0.

В вашем примере, однако, это бессмысленно, так как [1, 2, 3] всегда будет правдой. Но если вы используете переменную, тогда будет возможно, что переменная не будет назначена, поэтому тогда будет применяться значение по умолчанию.

Here is an example, который показывает, как различные типы будут применяться

Here is more information on Truthy and Falsey vaues

+0

Это бессмысленно, но, по-видимому, это то, что скомпилировано« wisp », возможно, в качестве меры предосторожности –

1

Я не верю, что || 0 ничего не делает. Оператор || проверяет значение null, undefined и т. Д., И если найден, он вернет правую часть выражения.

В этом примере [1, 2, 3] никогда не имеет значения null, поэтому 0 никогда не будет возвращен.

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