Предотвращение значения 0, оценивающего в ложь при использовании логического ИЛИ - PullRequest
0 голосов
/ 25 ноября 2018

Мне интересно, был ли способ обойти эту проблему.В настоящее время я сохраняю значение в переменной следующим образом:

Session['Score'] = 0; 

Позже у меня есть такое назначение:

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

Проблема в том, что Session['Score'] установлен в 0 как указано выше, JavaScript будет интерпретировать его как:

Score = false || 'not set';

, что означает Score будет оцениваться в 'not set' вместо 0!

Как обойти эту проблему

Ответы [ 4 ]

0 голосов
/ 25 ноября 2018

Вы можете сделать это с помощью назначения деструктурирования :

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 ); 
0 голосов
/ 25 ноября 2018

Вы можете быть более точным в своем намерении, создав несколько функций:

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
0 голосов
/ 25 ноября 2018

Самый простой способ - установить значение, а затем проверить, является ли оно ложным, но не равным 0

let score = Session['Score'];

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

Как уже упоминалось Патрик Робертс , вы также можетевыберите использование троичного оператора в сочетании с оператором in:

Score = 'Score' in Session ? Session.Score : 'not set'
0 голосов
/ 25 ноября 2018

Вместо этого используйте строку:

Session['Score'] = "0";

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