В PHP очень часто можно увидеть код, написанный следующим образом:
if($summary = get_post_summary())
{
return $summary;
}
Я имею в виду назначение внутри условия . Как ни странно, это может быть сделано и в JavaScript, хотя это гораздо реже:
if(summary = document.getElementById("post-summary"))
{
return summary.innerHTML;
}
На первый взгляд, вы будете прощены за то, что думаете, что это опечатка! Действительно, некоторые отладчики будут отмечать это предупреждением, спрашивая, имели ли вы в виду проверку на равенство ( ==
=
Но это не ошибка — ключ к пониманию состоит в том, чтобы понять две вещи :
Сначала присваивание возвращает значение (значение, которое вы присвоили). Второе и самое важное, возвращаемое значение оценивается как истинное или ложное и в конечном итоге определяет, выполняется ли условие.
Теперь, в мире оценки и обхода DOM , этот метод является безопасным и предсказуемым, потому что узлы DOM либо существуют, либо являются null—
null
false
. Таким образом, в приведенном выше примере кода условие будет иметь значение true
"#post-summary"
false
Точно так же вы можете использовать тот же трюк, чтобы перебрать неизвестную иерархию, проходя через последовательных родителей с помощью while()
В этом примере создается массив каждого имени узла между целью события и #document
var names = [], node = e ? e.target : event.srcElement;
do
{
names.push(node.nodeName);
}
while(node = node.parentNode)
Но в других местах JavaScript вы можете оказаться на гораздо менее надежной территории, потому что насколько истинным или ложным окажется множество значений, вовсе не интуитивно понятно.
Например, положительные и отрицательные числа оцениваются как true
NaN . И как ни странно, object
Boolean
всегда оценивается как true
new Boolean(false)
Так что будьте осторожны! Такой синтаксис не для слабонервных; и при этом это не должно использоваться неосторожным способом, с чрезмерной уверенностью в преобразовании типов и приведении произвольных значений. Но при хорошем использовании в подходящих обстоятельствах он может упростить многие условия для создания более быстрого и экономичного кода.
Миниатюра кредит: sbwoodside