0

私は次のことで立ち往生しています:

foo = properties[field] || overrides.default || config.widget.default || undefined;

console.log(properties[field])     // undefined
console.log(overrides.default)     // 0
console.log(config.widget.default) // undefined

私が理解しているように、そうfooあるべきです0。それなのに…undefined

これはまだ機能します:

foo = properties[field] || overrides.default;

しかし、別の OR オプションを追加するとすぐに機能しなくなります。

質問:
2 番目value=0のオペランドがオペランドをオーバーライドしていないのはなぜundefinedですか?

ありがとう!

4

1 に答える 1

1

演算子は、真の場合は左側の||オペランドを返し、そうでない場合は右側のオペランドを返します。

あなたの例では、すべてのオペランドに偽の値があるため、複合||ステートメントは最も右の値を返します。

JS では、次はすべて誤りです: 0, ""(空文字列), undefined, null, NaN. そしてもちろんfalse。他のすべての値は true です (空の文字列ではないため、"0"またはのような文字列を含み"false"ます)。

于 2013-09-12T11:45:02.133 に答える