使用逻辑或时,防止将值0评估为false

时间:2018-11-24 21:56:51

标签: javascript boolean logical-operators short-circuiting

我想知道是否有解决此问题的方法。我目前将值存储在这样的变量中:

Session['Score'] = 0; 

后来我有这样的作业:

Score = Session['Score'] || 'not set';

问题是,当如上所述将Session['Score']设置为0时,JavaScript会将其解释为:

Score = false || 'not set';

这意味着Score将计算为'not set'而不是0

如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

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

let score = Session['Score'];

if (!score && score !== 0) {
  score = 'not set';
}

Patrick Roberts所述,您还可以选择结合使用ternary operatorin运算符:

Score = 'Score' in Session ? Session.Score : 'not set'

答案 1 :(得分:3)

您可以使用destructuring assignment进行此操作:

let { Score = 'not set' } = Session;

如果未设置:

const Session = { };
let { Score = 'not set' } = Session;
console.log( Score ); 

如果将其设置为undefined以外的任何值,包括虚假的值:

const Session = { Score: 0 };
let { Score = 'not set' } = Session;
console.log( Score ); 

答案 2 :(得分:1)

通过创建一些功能,您可以更明确地表达自己的意图:

function getScore(s)
{
    var result = s["Score"];
    if (result == null) {
        result = 0;
    }
    return result;
}

function addScore(s, v)
{
    var result = s["Score"];
    if (result == null) {
        result = 0;
    }
    result += v;
    s["Score"] = result;
    return result;
}

var Session = {};
document.write("Score ");
document.write(getScore(Session));
document.write("<p/>");
addScore(Session, 10);
document.write("Score ");
document.write(getScore(Session));

预期输出:

Score 0

Score 10

答案 3 :(得分:0)

使用字符串代替:

Session['Score'] = "0";

Score = Session['Score'] || 'not set';