我经常在我的 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 ...那为什么不呢?