2

谁能告诉我在定义对象之前使用三元运算符检查对象是否已经存在的原因?

var message = message || "hello",
    messageOverwritten = "Variable wasn't overwritten",
    messageOverwritten = messageOverwritten || "Variable wasn overwritten";

console.log( message );
console.log( messageOverwritten );​

/* 
 * Output
 *
 * -> hello
 * -> Variable wasn't overwritten
 */
4

2 回答 2

3

这里发生的所有事情都是一个“或”陈述。例如,如果messagenull或,它将在测试时评估为,而或语句将评估为右手边。然后,右侧将是设置为 的值。undefinedfalsemessage

这样做背后的原因是因为有些人认为它比替代方案更简洁:

if (!message)
    message = "hello";
于 2012-11-16T19:15:53.943 回答
0

wsanville 关于该语法的作用以及人们使用它的原因是正确的,但我认为您可能会问更多它的用处。我已经看到它主要用于为可选变量设置默认值。以函数为例

function foo(value){
   value = value || 'hello';
   console.log(value);
}

然后你可以说foo(),你会得到“你好”,或者foo('goodbye')得到“再见”。

于 2012-11-16T20:04:00.510 回答