设置默认值是我在创建JavaScript应用程序时最喜欢做的事情之一。在工作的时候,我遇到了一个很容易逃脱的错误。
这是对象的使用方式。
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
}
}
我的问题是,使用 || 运算符时如何处理布尔值
答案 0 :(得分:4)
this.preload = "preload" in o ? o.preload : true;
答案 1 :(得分:2)
我不认为在分配布尔值时这种构造是合适的(我也会小心地用数字做这个)因为你给出的原因 - false
值将被视为无效,甚至虽然它很好而且确实需要。
在您的情况下,您可以使用
进行作业this.preload = o.preload && true;
答案 2 :(得分:1)
||代表或。我们来看一些示例值:
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。
答案 3 :(得分:1)
我不是一个详尽的答案。 @bkail's solution应该做到这一点。但是,我想指出以下几点:我的问题是,在使用||时如何处理布尔值操作
如果第一个操作数是真实的,||
运算符将生成其第一个操作数的值。否则它会产生第二个操作数 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: The Good Parts - 第17页
答案 4 :(得分:0)
试试这个:
this.preload = !o || o.preload == null ? true : o.preload;
答案 5 :(得分:0)
这应该有效
this.preload = o.preload === false ? false : true;
如果o.preload IS false
,我们会将其设为false
,否则为true
您可能希望在开头添加o = o || {};
以确保o
存在
答案 6 :(得分:0)
只是强调它:
this.preload = Boolean(this.preload);
或者,如果您不希望非布尔值评估为true:
this.preload = typeof this.preload === 'boolean' ? this.preload : false;