为什么逻辑运算符(&&和||)不总是返回布尔结果?

为什么这些逻辑运算符返回一个对象而不是布尔值?

var _ = (obj.fn && obj.fn() ) || obj._ || ( obj._ = {} );

var _ = obj && obj._;

我想了解为什么它返回obj.fn()(如果已定义)OR的obj._结果,而不返回布尔结果。

回答:

var _ = ((obj.fn && obj.fn() ) || obj._ || ( obj._ == {/* something */}))? true: false

将返回布尔值。

请注意,这是基于我的测试。我不会被完全依赖。

它是一个 赋值true或 赋值的表达式false。而是分配计算的值。

让我们看一下这个表达式。

表达式示例:

var a = 1 || 2;

// a = 1

// it's because a will take the value (which is not null) from left

var a = 0 || 2;

// so for this a=2; //its because the closest is 2 (which is not null)

var a = 0 || 2 || 1; //here also a = 2;

您的表情:

var _ = (obj.fn && obj.fn() ) || obj._ || ( obj._ = {} );

// _ = closest of the expression which is not null

// in your case it must be (obj.fn && obj.fn())

// so you are gettig this

另一个表达:

var a = 1 && 2;

// a = 2

var a = 1 && 2 && 3;

// a = 3 //for && operator it will take the fartest value

// as long as every expression is true

var a = 0 && 2 && 3;

// a = 0

另一个表达:

var _ = obj && obj._;

// _ = obj._

以上是 为什么逻辑运算符(&&和||)不总是返回布尔结果? 的全部内容, 来源链接: utcz.com/qa/401679.html

回到顶部