私はJavascriptで次のパターンをよく使用しました。
x = couldBeNullThing || valueIfItIsNull;
それが勝つため:
x = couldBeNullThing ? couldBeNullThing : valueIfItIsNull;
私はまた、同じパターンのわずかな変形を頻繁に使用します。
x = x || valueIfXIsNotDefined;
それはすべて素晴らしいです...問題を除いて、私は最近発見しました:
foo = "";
//assert foo.x === undefined;
foo.x = foo.x || valueIfXIsNotDefined;
//assert foo.x === undefined;
つまり、文字列があり、string.aPropertyThatStringDoesntHave||を実行する場合 foo、fooも実際の値も返されません。代わりに、未定義になります。
誰かがこれがなぜであるか説明できますか?foo.xが未定義の場合、foo.x || anyElseは常にanythingElseになるはずです...では、なぜそうではないのですか?