2012-06-28 103 views
10

这是没有意义的给我,但我有一种感觉,我看到使用这个代码:你可以给变量声明添加一个条件吗?

var abc = def || ghi; 

我的问题是,这是有效的?我们可以给变量声明添加一个条件吗?我想,答案是否定的,但我有这个想法,我在代码中看到过类似的东西。

回答

17

这给予abcdef的价值,如果它不是” t falsy(即不是false,nullundefined0或空字符串),或者ghi的值如果不是。

var abc; 
if (def) abc = def; 
else abc = ghi; 

这是常用的选项:

到这相当于

function myfunc (opts) { 
    var mything = opts.mything || "aaa"; 
} 

如果你打电话myfunc({mything:"bbb"})它用你给的值。如果你不提供任何东西,它使用"aaa"

在这种情况下,为了让呼叫者完全跳过参数,我们也已经开始函数

opts = opts || {}; 
+0

1。如果“def”计算结果为true,可能会更准确,因为如果它是“0”,空字符串,“false”等,那么'abc'将得到'ghi'的值。 –

3

,您可以添加条件变量声明

您可以使用它像这样,

function greet(person) { 
    var name = person || 'anonymouse'; 
    alert('Hello ' + name); 
} 
greet('jashwant'); 
greet();​ 

jsfiddle demo

0

好了,看,这是一样的东西,你要么检查,如果有一个为真。真实的将被退回。 :)

var abc = def || ghi; 

等同于:

var abc = return (def == true) or (ghi == true) 
+2

小心。你的答案意味着这个操作总是分配一个布尔值。这只是** **如果'def'和'ghi'是布尔值的话。在任何情况下,'abc'都会假设'ghi'的值(不论那个值是什么)_unless'def'评估为true_。如果'def'是“hello”,那么abc将是“hello”(不是booelan)。如果'def'是false/empty/zero/undefined /等,'ghi'是“world”,那么'abc'将会是“world”(同样不是布尔值)。 – user113215

6

代码变种abc = def || ghi;

是一回事

if (def) { //where def is a truthy value 
    var abc = def; 
} else { 
    abc = ghi; 
} 

你要像一个if语句的条件?

if (xxx==="apple") { 
    var abc = def; 
} else { 
    abc = ghi; 
} 

其作为写为三元运算符是:

var abc = (xxx==="apple") ? def : ghi; 
+0

刚刚看到了我昨天看到的一个活生生的例子(javascript hoist)。即使在你的第一个例子中'def'是错误的,'abc'也不是全局的。我对吗 ? – Jashwant

+0

'abc'可以是全局的,只取决于它的定义。 – epascarello

相关问题