2016-01-27 4 views
-1

есть если заявлениеКак это утверждение if работает с запятой?

if ((sliding || "Window" == type) && 
    nbCasement % 2 != 1 || sliding || "Garage" == type || f({ 
    name: "hinge" 
}), 
    nbCasement > 0 && !sliding && f({ 
    name: "side" 

}), 
    d && apiProperty) 

с &&|| и ,

Я думал, что это то же самое с этим кодом:

f({ 
    name: "hinge" 
}); 
f({ 
    name: "side" 
}); 
if ((sliding || "Window" == type) && 
    nbCasement % 2 != 1 || sliding || "Garage" == type || 
    nbCasement > 0 && !sliding && 
    d && apiProperty) 

но результат отличается то, что я думал.

Как это заявление работает? какой состояние сделать f({name:xxx}) пробег?

f оп ределяется является

var e = [] 
      , f = function(a) { 
      d && d.blackList && d.blackList[a.name] || e.push(a) 
     }; 
+0

Некоторые контекст может помочь нам, что вы знаете ... – RononDex

+0

Было бы полезно, если бы вы объяснили, почему вы думали, что эти фрагменты кода эквивалентны, так что было бы легче сказать, какая часть вашего мыслительного процесса была неправильной. Например, почему вы считаете, что вызовы 'f()' всегда будут выполняться (и их возвращаемые значения будут отброшены)? – JJJ

+0

Где вы нашли этот код? В каком-то миниатюрном сценарии? Это объясняет форматирование. – Bergi

ответ

1

comma operator просто оценивает все, прежде чем вернуться последнее значение. Ваш фрагмент эквивалентен

(sliding || "Window" == type) && nbCasement % 2 != 1 || sliding || "Garage" == type || f({ 
    name: "hinge" 
}); 
nbCasement > 0 && !sliding && f({ 
    name: "side" 
}); 
if (d && apiProperty) 

, которые могут быть очищены и prettified к

if (!sliding) { 
    if (("Window" != type || nbCasement % 2 == 1) && "Garage" != type) 
     f({ 
      name: "hinge" 
     }); 
    if (nbCasement > 0) 
     f({ 
      name: "side" 
     }); 
} 
if (d && apiProperty) 
+0

Thankyou! но забудьте «скользящий». почему 'nbCasement> 0 &&! slide && f ({ name:" side " });' == 'if (nbCasement> 0) {f ({name:" side "});}' – chanjianyi

+0

См. [здесь ] (http://stackoverflow.com/q/6970346/1048572) и обратите внимание, что эта часть стала 'if (! slide) {if (nbCasement> 0) f ({...}); } ' – Bergi

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