我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
我知道我可以测试一个JavaScript变量,然后定义它,如果它是未定义的,但有没有某种方式说
var setVariable = localStorage.getItem('value') || 0;
这似乎是一种更清晰的方式,我很确定我在其他语言中见过这种情况。
当前回答
逻辑空赋值,ES2020+解决方案
新的操作符目前正在添加到浏览器中,??=, ||=, &&=。这篇文章将关注??=。
它检查左边是否未定义或为空,如果已经定义,则短路。如果不是,右边的变量被赋值给左边的变量。
比较的方法
// Using ??=
name ??= "Dave"
// Previously, ES2020
name = name ?? "Dave"
// or
if (typeof name === "undefined" || name === null) {
name = true
}
// Before that (not equivalent, but commonly used)
name = name || "Dave" // Now: name ||= "Dave"
基本的例子
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
对象/数组的例子
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
??=浏览器支持2022年10月- 93%
??= Mozilla文档
||= Mozilla文档
&&= Mozilla文档
其他回答
var setVariable = (typeof localStorage getItem(’value’)! = =’undefined’&& localStorage getItem(’value’))| | 0;
你可以使用以下任何一种方法。
let x;
let y = 4;
x || (x = y)
在ES12或之后
let x;
let y = 4;
x ||= y;
逻辑空赋值,ES2020+解决方案
新的操作符目前正在添加到浏览器中,??=, ||=, &&=。这篇文章将关注??=。
它检查左边是否未定义或为空,如果已经定义,则短路。如果不是,右边的变量被赋值给左边的变量。
比较的方法
// Using ??=
name ??= "Dave"
// Previously, ES2020
name = name ?? "Dave"
// or
if (typeof name === "undefined" || name === null) {
name = true
}
// Before that (not equivalent, but commonly used)
name = name || "Dave" // Now: name ||= "Dave"
基本的例子
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
对象/数组的例子
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
??=浏览器支持2022年10月- 93%
??= Mozilla文档
||= Mozilla文档
&&= Mozilla文档
检查typeof而不是undefined似乎更合乎逻辑?我假设你期望一个数字,因为你设置var为0时未定义:
var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;
在这种情况下,如果getVariable不是一个数字(字符串、对象等),setVariable将被设置为0
即使默认值是布尔值也有效:
var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );