为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小唯快跑啊 2019-07-04 16:38:54
为什么逻辑运算符(&和\)不总是返回一个布尔结果?为什么这些逻辑运算符返回一个对象而不是一个布尔值?var _ = (obj.fn && obj.fn() ) || obj._ || ( obj._ = {} );var _ = obj && obj._;我想知道为什么它返回的结果obj.fn()(如果已定义)或obj._但不是布尔结果。
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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

将返回布尔值。

更新

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

它是一个表达式指派truefalse价值。相反,它分配计算值。

让我们看看这个表达式。

一个示例表达式:

var a = 1 || 2;// a = 1// it's because a will take the value (which is not null) from leftvar 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 = 2var a = 1 && 2 && 3;// a = 3 //for && operator it will take the fartest value
// as long as every expression is truevar a = 0 && 2 && 3;// a = 0

另一种说法:

var _ = obj && obj._;// _ = obj._


查看完整回答
反对 回复 2019-07-04
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在JavaScript中,两者都是||&&是逻辑短路操作符,在从左到右计算时返回第一个完全确定的“逻辑值”。

在表达中X || YX首先进行计算,并将其解释为布尔值。如果此布尔值为“true”,则返回该值。和Y未评估。(因为不管是否Y是真的或者Y是假的,X || Y已完全确定。)那是短路部分。

如果这个布尔值是“false”,那么我们仍然不知道X || Y是对的还是错的直到我们评估Y,并将其解释为布尔值。那麽Y会被归还。

&&执行同样的操作,除非它停止计算第一个参数是否为假。

第一个棘手的部分是,当一个表达式被计算为“true”时,表达式本身就会被返回。它在逻辑表达式中算作“true”,但您也可以使用它。这就是为什么您看到实际值被返回的原因。

第二个棘手部分是,当表达式被计算为“false”时,在JS1.0和1.1中,系统将返回一个布尔值“false”;而在JS1.2中,它返回表达式的实际值。

在JS中false0-0""nullundefinedNaNdocument.all算错.

当然,为了讨论起见,我在这里引用合乎逻辑的值。当然,文字字符串"false"与值不相同。false,因此也是正确的。


查看完整回答
反对 回复 2019-07-04
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

用最简单的术语:

这个||运算符返回第一个真值,如果没有一个是true,则返回最后一个值(这是一个假值)。

这个&&运算符返回第一个Falsy值,如果没有Falsy值,则返回最后一个值(这是一个真实值)。

就这么简单。在你的控制台里做实验,让你自己看看。

"" && "Dog"    // ""

"Cat" && "Dog" // "Dog"

"" || "Dog"    // "Dog"

"Cat" || "Dog" // "Cat"


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 358 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信