2013-03-12 92 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