2013-03-12 96 views
1

如果新值未定義,這是更新變量並保持原始值的合法方法嗎?保持原始值爲「variable = NEWVAR || variable;」

variable = NEWVAR || variable; 

我創建了一個Fiddle,到目前爲止,它看起來很好,但我不想得到任何討厭的驚喜。

下面是測試情況:

var test = "hello"; 

test = undefined || test; 

alert('"' + test + '"'); 
+0

相關:http://stackoverflow.com/questions/4446433/how-does-javascript-logical-assignment-work – 2013-03-12 13:36:50

+0

它會保持原來的,如果NEWVAR是未定義的或爲null,但如果NEWVAR爲0,則爲false,並且空字符串 – mplungjan 2013-03-12 13:42:40

回答

1

我會說,是的,我用它經常。但你要記住,

道格拉斯Crockford的:JavaScript中的好零件(第40頁)

的||如果第一個操作數是truthy,則運算符會生成其第一個操作數的值。否則,它會生成第二個操作數的值 。

因此,如果NEWVAR包含任何falsy(falsenullundefinedNaN0"")值,第二opertand進行評價。

只要你意識到這一點,你可以隨時使用||運營商獲得默認值

道格拉斯Crockford的:JavaScript中的好零件(第51頁)

的||運營商可以用來填充默認值:

var middle = stooge["middle-name"] || "(none)"; 
var status = flight.status || "unknown"; 
+0

謝謝,對我來說,falsy值是可以的,因爲我想在這種情況下保持原始值 – Stefan 2013-03-12 16:19:10

1

是,也不是。它在技術上是有效的,但是您必須小心falsy values,因爲如果NEWVAR0,false,""或任何其他虛假值,它將不會被分配。更明智的方式來做到這一點是檢查NEWVAR是否被定義,或許還有一個三級運營商:

variable = (typeof NEWVAR === "undefined") ? variable : NEWVAR; 
+1

不會返回類似於「Object」,「Array」等的返回類型...我認爲您的意思是'typeof NEWVAR!=='undefined'' – eis 2013-03-12 13:43:18

+0

@eis:哎呀,錯過了。謝謝。 – 2013-03-12 13:43:53

+0

你也可以看到它,如果你不想**任何falsy **值(例如'「」')被賦值,這個方法可以非常方便。 它更關注記住什麼評估'falsy' 哦和@ElliotBonneville不是這個'三元'運算符嗎? =) – C5H8NNaO4 2013-03-12 13:45:57