Javascript速记如果+速记赋值

时间:2016-03-30 02:37:37

标签: javascript

我想知道是否有办法合并速记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;
    }

}

我希望这个问题不会(太)令人困惑:)

2 个答案:

答案 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