处理布尔值
设置默认值是创建JavaScript应用程序时最喜欢做的事情之一。在工作时,我遇到了一个可以轻易逃脱我的bug。处理布尔值
这是如何使用该对象。
var obj = new App({
imgs: [];
preload: false
});
这是如何定义对象的。
var App = function(o) {
this.imageFolder = o.imgs;
this.preload = o.preload || true; // the idea is to set a default value of true
if(this.preload) {
// preload images here
}
}
我的问题是,如何在使用||时处理布尔值。操作
this.preload = "preload" in o ? o.preload : true;
||代表或。让我们来看看一些样本值:
this.preload = o.preload || true;
如果o.preLoad =真:
true || true is the same as = true;
如果o.preLoad = FALSE:
false || true always will equal true
自定义o.preLoad具有默认值为false,该语句将始终评估为true。
我的问题是,如何在使用||时处理布尔值。运营商?
我并不是一个详尽的答案。 @bkail's solution应该做的伎俩。但是,我想指出以下内容:
如果第一个操作数为truthy,则||
运算符会生成其第一个操作数的值。否则它会产生第二个操作数的值。
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 {}"
来源:JavaScript: The Good Parts由Douglas Crockford的 - 第17页
我不认为赋予布尔值时结构是合适的(我还小心号码这样做)因为你已经给出 - false
价值将被视为无效,即使它很好,确实需要。
你的情况,你可以做的分配与
this.preload = o.preload && true;
+1简单 – 2010-08-31 14:02:02
@Q_the_novice,如果未设置“o.preload”,则返回undefined。 'var o = {}; alert(o.preload && true);' – CaffGeek 2010-08-31 14:09:42
使用'!! o.preload && true'。 – 2010-08-31 14:15:55
试试这个:
this.preload = !o || o.preload == null ? true : o.preload;
这应该工作
this.preload = o.preload === false ? false : true;
如果o。预紧ISfalse
,那么我们将它设置为false
,否则,它是true
你也许会想在开始添加o = o || {};
确保o
存在
只是强制转换它:
this.preload = Boolean(this.preload);
或者如果您不希望非布尔值评估为true:
this.preload = typeof this.preload === 'boolean' ? this.preload : false;
+1也正确 – 2010-08-31 14:03:02