我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
当前回答
是的,它可以这样做,但严格来说,如果检索到的值是假的,将分配默认值,而不是真正未定义的。因此,它不仅可以匹配undefined,还可以匹配null, false, 0, NaN, ""(但不匹配"0")。
如果你只想在变量严格未定义的情况下设置为默认值,那么最安全的方法是这样写:
var x = (typeof x === 'undefined') ? your_default_value : x;
在新的浏览器上,这样写其实是安全的:
var x = (x === undefined) ? your_default_value : x;
但是请注意,在旧的浏览器中,允许声明一个名为undefined的变量,该变量具有一个已定义的值,这可能会导致测试失败。
其他回答
我需要在几个地方“设置一个未定义的变量”。我用@Alnitak answer创建了一个函数。希望它能帮助到某些人。
function setDefaultVal(value, defaultValue){
return (value === undefined) ? defaultValue : value;
}
用法:
hasPoints = setDefaultVal(this.hasPoints, true);
如果你是FP(函数式编程)爱好者,Ramda有一个简洁的帮助函数,叫做defaultTo:
用法:
const result = default (30)(value)
它在处理未定义的布尔值时更有用:
const result2 = defaultTo(false)(dashboard.someValue)
检查typeof而不是undefined似乎更合乎逻辑?我假设你期望一个数字,因为你设置var为0时未定义:
var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;
在这种情况下,如果getVariable不是一个数字(字符串、对象等),setVariable将被设置为0
ES2020回答
使用Nullish Coalescing Operator,如果value为空或未定义,则可以设置默认值。
const setVariable = localStorage.getItem('value') ?? 0;
但是,您应该注意,空合并运算符不会为其他类型的假值(如0和")返回默认值。
但是,一定要注意浏览器的支持。您可能需要使用像Babel这样的JavaScript编译器将其转换为向后兼容的内容。如果你正在使用Node.js,它从版本14开始就被支持了。
在我看来,对于当前的javascript实现,
var [result='default']=[possiblyUndefinedValue]
是一种很好的方法(使用对象解构)。