作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得这一定是重复的,但我找不到任何东西,可能是由于措辞不同,或者只是因为确实没有更好的东西。
我正在生成大量的 JS 代码,其中“OR”对象属性与变量,而标识符不一定匹配。看起来像这样(值为 bool 值):
a.borderline = a.borderline || borderline;
a.st1 = a.st1 || st;
a.ref64 = a.ref64 || ref;
a.unfortunatelySometimesQuiteLongIndentifier123 = a.unfortunatelySometimesQuiteLongIndentifier123 || unfortunatelySometimesQuiteLongIndentifier;
...
为了让它更精简,我尝试了类似的方法
a.st1 |= st;
但它使 a.st1
成为整数而不是 bool 值,我不想添加另一行带有双重否定的代码以将其重新键入回 bool 值。
根据直觉,我也尝试了 ||=
,但没有帮助 :)
有没有更好(更短)的方式来编写这些命令?
注意:我无法使用循环来处理命令,因为这些命令不会一次全部执行,而是分散在其余代码中的小块中(为简单起见,省略了这些命令).
最佳答案
不,javascript 中没有简写 OR 运算符。 Coffeescript但是提供 ||=
和 ?=
来支持 this idiom .
Is there any better (shorter) way of writing these commands?
在您的例子中,您正在修改 a
对象而不是分配给变量。您可以以循环方式执行此操作:
function amendWith(target, source)
for (var p in source)
if (!target[p])
target[p] = source[p];
return target;
}
amendWith(a, {
borderline: borderline,
st1: st,
ref64: ref,
unfortunatelySometimesQuiteLongIndentifier123: unfortunatelySometimesQuiteLongIndentifier
…
});
关于Javascript 简写 OR 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393788/
我是一名优秀的程序员,十分优秀!