2013-11-29 2 views
-1

Ниже приведен простой фрагмент кода:Что делает «count = (count && count.length || 0)»; делать?

pass="Hello"; 
count=pass.match(/[A-Z]/g); 
count=(count && count.length || 0); 
alert(count); //1 

Я просто не понимаю, как работает третья линия, count=(count && count.length || 0);. Какова логика? Благодаря!

+0

Условие if true (1) else false (0) – SHIN

+0

Если есть переменная count, и она имеет длину, используйте ее, в противном случае используйте ноль – adeneo

ответ

4

Это сокращение:

if (count) { 
    count = count.length; 
} else { 
    count = 0; 
} 
+0

count = (count && count.length); означает ? – SHIN

+0

@SHIN 'if (count) {count = count.length}' – robertklep

+0

Вы уверены? (count) {count = count.length} или if (count) {count = count.length;} else {count = 0;} itslef – SHIN

3

Это в основном эквивалентно

count = (count)? count.length : 0; 

или более явных

if (count) 
    count = count.length; 
else 
    count = 0; 
+1

Или 'count = (count || []). Length';) – robertklep

+1

@robertklep Это не обфускационный конкурс! : D – Drax

+0

Не удалось устоять :) – robertklep

1

Если вы хотите записать в английский, это означает

count Если это truthy, получить count.length, а затем, если count.length является falsy, получить 0. Если count был falsy, получите 0. Установите count, равный тому, что мы получили.

Вы можете думать, быть truthy как это (и falsy быть обратным)

function isTruthy(x) { 
    if (x) return true; 
    return false; 
} 
+0

это, вероятно, самая полезная функция когда-либо; p – Drax

+0

@Drax Эта функция isTruthy предназначена для передачи концепции, если читатель не встречал термины _truthy_ и _falsy_ раньше, а не то, что вы ожидаете увидеть на практике код. –

+1

понял, что просто дразнить :) – Drax

0

Так в основном, a=(a && b || c); коротка для

if (a) 
    a=b 
else 
    a=c 

Я согласился, как я испытал с a, в которой a в {-1,0, null, 1}. Сначала я запутался в том, что я думал, что логическая операция всегда возвращает true/false или значение 1/0. Но теперь я узнал что-то новое. Спасибо всем!

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