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

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

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

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

我想知道为什么它返回的结果obj.fn()(如果已定义)或obj._但不是布尔结果。


小唯快跑啊
浏览 359回答 3
3回答

开心每一天1111

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 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._

眼眸繁星

在JavaScript中,两者都是||和&&是逻辑短路操作符,在从左到右计算时返回第一个完全确定的“逻辑值”。在表达中X || Y, X首先进行计算,并将其解释为布尔值。如果此布尔值为“true”,则返回该值。和Y未评估。(因为不管是否Y是真的或者Y是假的,X || Y已完全确定。)那是短路部分。如果这个布尔值是“false”,那么我们仍然不知道X || Y是对的还是错的直到我们评估Y,并将其解释为布尔值。那麽Y会被归还。和&&执行同样的操作,除非它停止计算第一个参数是否为假。第一个棘手的部分是,当一个表达式被计算为“true”时,表达式本身就会被返回。它在逻辑表达式中算作“true”,但您也可以使用它。这就是为什么您看到实际值被返回的原因。第二个棘手部分是,当表达式被计算为“false”时,在JS1.0和1.1中,系统将返回一个布尔值“false”;而在JS1.2中,它返回表达式的实际值。在JS中false, 0, -0, "", null, undefined, NaN和document.all全算错.当然,为了讨论起见,我在这里引用合乎逻辑的值。当然,文字字符串"false"与值不相同。false,因此也是正确的。

慕桂英4014372

用最简单的术语:这个||运算符返回第一个真值,如果没有一个是true,则返回最后一个值(这是一个假值)。这个&&运算符返回第一个Falsy值,如果没有Falsy值,则返回最后一个值(这是一个真实值)。就这么简单。在你的控制台里做实验,让你自己看看。"" && "Dog"    // """Cat" && "Dog" // "Dog""" || "Dog"    // "Dog""Cat" || "Dog" // "Cat"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript