如果新值未定義,這是更新變量並保持原始值的合法方法嗎?保持原始值爲「variable = NEWVAR || variable;」
variable = NEWVAR || variable;
我創建了一個Fiddle,到目前爲止,它看起來很好,但我不想得到任何討厭的驚喜。
下面是測試情況:
var test = "hello";
test = undefined || test;
alert('"' + test + '"');
如果新值未定義,這是更新變量並保持原始值的合法方法嗎?保持原始值爲「variable = NEWVAR || variable;」
variable = NEWVAR || variable;
我創建了一個Fiddle,到目前爲止,它看起來很好,但我不想得到任何討厭的驚喜。
下面是測試情況:
var test = "hello";
test = undefined || test;
alert('"' + test + '"');
我會說,是的,我用它經常。但你要記住,
道格拉斯Crockford的:JavaScript中的好零件(第40頁)
的||如果第一個操作數是truthy,則運算符會生成其第一個操作數的值。否則,它會生成第二個操作數的值 。
因此,如果NEWVAR
包含任何falsy(false
,null
,undefined
,NaN
,0
,""
)值,第二opertand進行評價。
只要你意識到這一點,你可以隨時使用||
運營商獲得默認值
道格拉斯Crockford的:JavaScript中的好零件(第51頁)
的||運營商可以用來填充默認值:
var middle = stooge["middle-name"] || "(none)";
var status = flight.status || "unknown";
謝謝,對我來說,falsy值是可以的,因爲我想在這種情況下保持原始值 – Stefan 2013-03-12 16:19:10
是,也不是。它在技術上是有效的,但是您必須小心falsy values,因爲如果NEWVAR
是0
,false
,""
或任何其他虛假值,它將不會被分配。更明智的方式來做到這一點是檢查NEWVAR
是否被定義,或許還有一個三級運營商:
variable = (typeof NEWVAR === "undefined") ? variable : NEWVAR;
相關:http://stackoverflow.com/questions/4446433/how-does-javascript-logical-assignment-work – 2013-03-12 13:36:50
它會保持原來的,如果NEWVAR是未定義的或爲null,但如果NEWVAR爲0,則爲false,並且空字符串 – mplungjan 2013-03-12 13:42:40