Обработка логических значений - PullRequest
0 голосов
/ 31 августа 2010

Установка значений по умолчанию - одно из моих любимых занятий при создании приложений JavaScript.Во время работы я столкнулся с ошибкой, которая могла легко ускользнуть от меня.

Так используется объект.

var obj = new App({
             imgs: [];
             preload: false
          });

Так определен объект.1007 *

Мой вопрос: как вы обрабатываете логические значения при использовании оператора ||

Ответы [ 7 ]

4 голосов
/ 31 августа 2010
this.preload = "preload" in o ? o.preload : true;
2 голосов
/ 31 августа 2010

Я не думаю, что конструкция является подходящей при назначении логических значений (я бы также сделал это осторожно с числами) по той причине, которую вы указали - значение false будет считаться недействительным, даже если онохорошо и действительно желательно.

в вашем случае вы можете выполнить назначение с помощью

this.preload = o.preload && true;
1 голос
/ 31 августа 2010

Мой вопрос: как вы обрабатываете логические значения при использовании || оператор?

Мой не исчерпывающий ответ. Решение @ bkail должно сработать. Однако я хотел бы отметить следующее:

Оператор || создает значение своего первого операнда, если первый операнд верен. В противном случае он выдает значение второго операнда 1 .

var preload;                     // undefined is falsy
preload = preload || true;
console.log(preload);            // true

var preload = false;             // false is obviously falsy
preload = preload || true;
console.log(preload);            // true

var preload = "";                // empty string is falsy
preload = preload || true;
console.log(preload);            // true

var preload = null;              // null is falsy
preload = preload || true;
console.log(preload);            // true

var preload = "something else";  // a non-empty string is truthy 
preload = preload || true;
console.log(preload);            // returns "something else", the first operand

var preload = {};                // even an empty object is truthy
preload = preload || true;
console.log(preload);            // returns "Object {}"

1 Источник: JavaScript: Хорошие части Дуглас Крокфорд - Страница 17

1 голос
/ 31 августа 2010

||обозначает или.Давайте рассмотрим некоторые примеры значений:

this.preload = o.preload || true;

Если o.preLoad = true:

true || true is the same as  = true;

Если o.preLoad = false:

false || true always will equal true

Так как выопределите для o.preLoad значение по умолчанию false, оператор всегда будет иметь значение true.

0 голосов
/ 31 августа 2010

Просто введите его:

this.preload = Boolean(this.preload);

Или, если вы не хотите, чтобы не булевы значения оценивались в true:

this.preload = typeof this.preload === 'boolean' ? this.preload : false;
0 голосов
/ 31 августа 2010

Это должно работать

this.preload = o.preload === false ? false : true;

Если o.preload IS false, тогда мы устанавливаем его на false, в противном случае это true

Возможно, вы захотите добавить o = o || {}; в начале, чтобы убедиться, что o существует

0 голосов
/ 31 августа 2010

попробуйте это:

 this.preload = !o || o.preload == null ? true : o.preload;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...