如果在 JavaScript 中未定义,则设置变量逻辑空赋值,ES2020+ 解决方案
2022-08-30 00:40:40
我知道我可以测试一个JavaScript变量,然后定义它,如果它是,但是没有某种说法undefined
var setVariable = localStorage.getItem('value') || 0;
似乎是一种更清晰的方式,我很确定我已经在其他语言中看到了这一点。
我知道我可以测试一个JavaScript变量,然后定义它,如果它是,但是没有某种说法undefined
var setVariable = localStorage.getItem('value') || 0;
似乎是一种更清晰的方式,我很确定我已经在其他语言中看到了这一点。
是的,它可以做到这一点,但严格来说,如果检索到的值是假的,而不是真正未定义的,它将分配默认值。因此,它不仅匹配,而且匹配 ,, , , (但不是 )。undefined
null
false
0
NaN
""
"0"
如果只想在变量严格时设置为默认值,那么最安全的方法是编写:undefined
var x = (typeof x === 'undefined') ? your_default_value : x;
在较新的浏览器上,实际上可以安全地编写:
var x = (x === undefined) ? your_default_value : x;
但请注意,在较旧的浏览器上可能会破坏这一点,在这些浏览器中,允许声明具有已定义值的名为的变量,从而导致测试失败。undefined
当前正在向浏览器 、 、 和 添加新的运算符。这篇文章将重点介绍.??=
||=
&&=
??=
这将检查左侧是否为 或 ,如果已定义,则短路。否则,右侧将分配给左侧变量。undefined
null
// 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" }
??= 浏览器支持九月 2021 - 90%