使用逻辑 OR 时防止 0 值评估为 false

Jam*_*mes 4 javascript boolean short-circuiting logical-operators

我想知道是否有办法解决这个问题。我目前正在将值存储在变量中,如下所示:

Session['Score'] = 0; 
Run Code Online (Sandbox Code Playgroud)

后来我有一个这样的作业:

Score = Session['Score'] || 'not set';
Run Code Online (Sandbox Code Playgroud)

问题是,当Session['Score']设置0为上面的值时,JavaScript 会将其解释为:

Score = false || 'not set';
Run Code Online (Sandbox Code Playgroud)

这意味着Score将评估为'not set'而不是0!

我该如何解决这个问题?

Iva*_*var 6

现在,您可以使用空合并运算符 (??)而不是逻辑 OR。它与逻辑 OR 类似,不同之处在于,当左侧为 null ( nullor undefined) 而不是falsy时,它仅返回右侧。

score = Session['Score'] ?? 'not set';
Run Code Online (Sandbox Code Playgroud)

旧答案:

最干净的方法可能是设置值,然后检查它是否为假但不等于0

let score = Session['Score'];

if (!score && score !== 0) {
  score = 'not set';
}
Run Code Online (Sandbox Code Playgroud)

正如Patrick Roberts提到的,您还可以选择将条件(三元)运算符与运算符结合使用in:

Score = 'Score' in Session ? Session.Score : 'not set'
Run Code Online (Sandbox Code Playgroud)