【问题标题】:Keep original value with "variable = NEWVAR || variable;" [duplicate]使用“variable = NEWVAR || variable;”保持原始值[复制]
【发布时间】:2013-02-28 01:16:33
【问题描述】:

如果新值未定义,这是更新变量并保留原始值的合法方式吗?

variable = NEWVAR || variable;

我创建了一个Fiddle,到目前为止它看起来还不错,但我不想得到任何令人讨厌的惊喜。

这是一个测试用例:

var test = "hello";

test = undefined || test;

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

【问题讨论】:

标签: javascript variables


【解决方案1】:

我会说,是的,我经常使用它。但你必须记住,

Douglas Crockford:Javascript 的优点(第 40 页)

||如果第一个操作数为真,则运算符产生其第一个操作数的值。否则,它会产生 第二个操作数的值。

因此,如果 NEWVAR 包含任何虚假 (false,null,undefined,NaN,0,"") 值,则计算第二个操作数。

只要您知道这一点,您就可以随时使用|| 运算符来获取默认值

Douglas Crockford:Javascript 的优点(第 51 页)

||运算符可用于填写默认值:

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

【讨论】:

  • 谢谢,假值对我来说没问题,因为在这种情况下我也想保留原始值
【解决方案2】:

是和不是。它在技术上有效,但你必须小心falsy values,因为如果NEWVAR0false"" 或任何其他虚假值,则不会分配它。更明智的做法是检查 NEWVAR 是否已定义,可能使用三级运算符:

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

【讨论】:

  • 不会 typeof 返回类似“Object”、“Array”等的东西...我想你的意思是typeof NEWVAR !== 'undefined'
  • @eis:哎呀,错过了。谢谢。
  • 您也可以反过来看,如果您不想分配 任何虚假 值,例如 "",这会非常方便。更重要的是要记住评估 falsy 哦和 @ElliotBonneville 这不是 ternary 运算符吗? =)
  • @eis:感谢您的编辑,但您把它弄反了。见this fiddle。 :)
  • @ElliotBonneville 是的,误读了 OP 的意图。习惯倒退的使用方式。
猜你喜欢
  • 2013-03-28
  • 2021-08-01
  • 1970-01-01
  • 2016-11-02
  • 2021-08-17
  • 2017-04-12
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多