2013-11-17 3 views
1

Извините, если этот вопрос не соответствует уровню сайта, я не могу найти помощь в другом месте. Я только начал изучать JavaScript, но я застрял на примере код, указанный в моем учебникеКак работает эта программа JavaScript?

var a = null; 
function b() {return "B";} 
(a || b)(); 
! "B" 

Существует недостаточно объяснение для кода и я не могу понять, как это работает, кто может мне помочь, пожалуйста

Благодаря

Акаши

ответ

2

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

Начнем с третьей строки: (a || b)();.

Первый a вычисляется и, если оно не null или undefined то результатом этого выражения a(), в противном случае результат равен b().

В вашем фрагменте кода a имеет значение null, поэтому выражение оценивается как b(), которое просто возвращает "B".

Оператор OR || оператор смотрит на операндами один за другим, до тех пор, пока не найдет значение, которое truthy и возвращает его, если все значения falsy то последний операнд возвращается.

Для получения дополнительной информации о truthy и falsy значения, check here

Теперь эта линия ! "B" все строки в JavaScript оценивается в true пустой строки "" за исключением, поэтому результат предыдущего выражения ! true поэтому false.

+0

спасибо за быстрый ответ – Programmer

+0

@Programmer Добро пожаловать, рад, что я мог бы помочь. –

+0

вы можете объяснить 3-ю строку немного больше – Programmer

2

ключ в том, как || оператор работает на. Эта линия:

(a || b)(); 

эквивалентно следующему:

var f; 
if (a) 
    f = a; 
else 
    f = b; 
f(); 

В || работает оператор по первой оценке с левой стороны (в данном случае, a). Затем он проверяет, является ли это значение «правдивым», а это означает, что это не null, 0, пустая строка и еще пара вещей. В этом случае это явно null, так что это не «правдиво».

Таким образом, оператор || продолжает оценивать правую сторону (в данном случае b), и это значение принимается в результате операции ||. Что такое «б»? Это небольшая функция, которая возвращает строку "B" при вызове.

Таким образом, после выполнения операции || вы остаетесь ссылкой на эту функцию, а последующий оператор вызова функции вызывает эту функцию.

+0

Обратите внимание, что оператор 'if' не является * точно * эквивалентным, потому что' || ', конечно, не вводит другую переменную в среду. – Pointy

1

Есть две переменные, a, который null и b, которая является функцией, которая всегда возвращает строку "B". (a || b)() демонстрирует немного, как логично & & и || работа в JavaScript - оценка short-circuited, а последнее оцениваемое значение - это значение всего выражения. Поскольку a является null, что является фальшивкой, (a || b)() оценивает на b(), поэтому вы получите печать "B".

В общем:

(a || b); //a if a is truthy, otherwise b 
(a && b); //a if a is falsy, otherwise b 

Falsy значения null, undefined, 0, пустая строка "", NaN и конечно false. Все остальное правдиво.

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