2012-06-28 100 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

相關問題