我想知道是否有办法合并速记if / else和速记+ =
这样的事情:
var value;
$.each(data.events, function(index, element) {
var otherValue = element.value;
value = value ? value + otherValue : '';
}
要防止的事情
value += otherValue
从未定义值时将'undefined'添加到开头。
长版将是:
var value;
$.each(data.events, function(index, element) {
var otherValue = element.value;
if(value){
value = value + otherValue;
}
}
我希望这个问题不会(太)令人困惑:)
答案 0 :(得分:1)
就像这样:
value = value && value + otherValue || value
另一种可能的方式是:
value && (value += otherValue)
就像value
是否真的评价下一个词(value += otherValue)
虽然我不会选择这些路径,但我认为编码时需要考虑的一件事不仅仅是我们的代码有多短,还有可读性。
我还是喜欢
if(value)
value += otherValue;
因为它更容易阅读并且看到你有条件
答案 1 :(得分:1)
修改强>
Geeze我发布的内容几乎与您底部示例中的内容完全相反。我会在这里删除我的问题,但它接受了= /
您可以使用AND &&
运算符:
console.log('foo' && 'hello'); // prints hello
console.log(null && 'hello'); // prints null
console.log(undefined && null); // prints undefined
console.log('foo' && null && 'bar'); // prints null
var value;
$.each(data.events, function(index, element) {
// if value is undefined, null, or empty then it stays the same.
// otherwise add append the element value
value = (value && value + element.value);
}
虽然这比你原来的
更具可读性var value;
$.each(data.events, function(index, element) {
// if value is undefined, null, or empty then it stays the same.
// otherwise add append the element value
if(value) value += otherValue;
}
我在下面留下了我的原始答案,我已经阅读了您的问题并看到了您的第一个代码段并回答了问题。但是你的第二个代码片段做了不同的事情,我现在还不确定答案是什么......
你可以||
运算符返回它在表达式为真时看到的第一个未定义值(例如:!!val === true
)或运算符序列中的最后一个值(假设你使用了所有的OR语句{ {1}})
||
因此,在您使用工作但更长的JavaScript代码的情况下,我们可以将其简化为以下
console.log(undefined || 'hello'); // prints hello
console.log('' || 'hello'); // prints hello
console.log(undefined || null); // prints null
console.log(undefined || '' || null); // prints null