如果新值未定义,这是更新变量并保持原始值的合法方法吗?保持原始值为“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