我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
当前回答
今天也遇到了这种情况,我不想让几个值的0被覆盖。我们有一个文件,其中包含一些用于此类场景的通用实用程序方法。下面是我为处理这种情况而添加的内容。
function getIfNotSet(value, newValue, overwriteNull, overwriteZero) {
if (typeof (value) === 'undefined') {
return newValue;
} else if (value === null && overwriteNull === true) {
return newValue;
} else if (value === 0 && overwriteZero === true) {
return newValue;
} else {
return value;
}
}
然后,如果我想只设置为未定义的值或也覆盖null或0值,可以调用最后两个参数作为可选。这里有一个调用它的例子,如果ID是undefined或null,它会将ID设置为-1,但不会覆盖0值。
data.ID = Util.getIfNotSet(data.ID, -1, true);
其他回答
是的,它可以这样做,但严格来说,如果检索到的值是假的,将分配默认值,而不是真正未定义的。因此,它不仅可以匹配undefined,还可以匹配null, false, 0, NaN, ""(但不匹配"0")。
如果你只想在变量严格未定义的情况下设置为默认值,那么最安全的方法是这样写:
var x = (typeof x === 'undefined') ? your_default_value : x;
在新的浏览器上,这样写其实是安全的:
var x = (x === undefined) ? your_default_value : x;
但是请注意,在旧的浏览器中,允许声明一个名为undefined的变量,该变量具有一个已定义的值,这可能会导致测试失败。
2018年ES6的答案是:
return Object.is(x, undefined) ? y : x;
如果变量x未定义,返回变量y…否则,如果定义了变量x,则返回变量x。
如果你是FP(函数式编程)爱好者,Ramda有一个简洁的帮助函数,叫做defaultTo:
用法:
const result = default (30)(value)
它在处理未定义的布尔值时更有用:
const result2 = defaultTo(false)(dashboard.someValue)
在我看来,对于当前的javascript实现,
var [result='default']=[possiblyUndefinedValue]
是一种很好的方法(使用对象解构)。
即使默认值是布尔值也有效:
var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );