Javascript 使用短路逻辑运算符测试空对象

Javascript 使用短路逻辑运算符测试空对象,javascript,variable-assignment,logical-operators,control-structure,Javascript,Variable Assignment,Logical Operators,Control Structure,我正在通读这本书,看到一行字我感到困惑。以下是相关描述和行: &&和| |运算符使用短路逻辑,这意味着它们是否执行第二个操作数取决于第一个操作数。这对于在访问空对象的属性之前检查空对象非常有用: 我在这里的困惑是,大概代码片段的目的是执行: var name; if (o){ name = o.getname(); } 然而,看起来这里发生的事情是,名称被分配了一个布尔值,布尔值是“o存在,并且它的名称不是空的”。换言之,在我看来: var name = false; if (o

我正在通读这本书,看到一行字我感到困惑。以下是相关描述和行:

&&和| |运算符使用短路逻辑,这意味着它们是否执行第二个操作数取决于第一个操作数。这对于在访问空对象的属性之前检查空对象非常有用:

我在这里的困惑是,大概代码片段的目的是执行:

var name;
if (o){
     name = o.getname();
}  
然而,看起来这里发生的事情是,名称被分配了一个布尔值,布尔值是“o存在,并且它的名称不是空的”。换言之,在我看来:

var name = false;
if (o && o.getname()){
    name = true;
}
谢谢

此答案是的评论,我希望他将其作为自己的答案发布,以获得奖励的声誉


看看最上面的:

逻辑运算符通常与布尔(逻辑)值一起使用;当逻辑运算符与布尔(逻辑)值一起使用时,它们返回一个布尔值。但是,&&和| |运算符实际上返回一个指定操作数的值,因此如果这些运算符与非布尔值一起使用,它们可能返回一个非布尔值


请看最上面的:“逻辑运算符通常与布尔(逻辑)值一起使用;当逻辑运算符与布尔(逻辑)值一起使用时,它们返回一个布尔值。但是,&&和| |运算符实际上返回一个指定操作数的值,因此如果这些运算符与非布尔值一起使用,它们可能返回一个非布尔值。”,
&&
返回其最左边的伪操作数,如果所有操作数都是真的,则返回最后一个操作数;
|
-最左边的伪操作数,如果所有操作数都是伪的,则返回最后一个操作数。您的问题是什么?是的,代码片段有一些作用,但对您来说,它应该有其他作用。那么,问题是什么?为什么?因为这就是它的编译方式…@Karl AndréGagnon上面的描述没有说清楚,这就是我要说的全部,所以我不确定它是否真的导致名称是布尔值,或者是否有一些我不知道的行为。@JoshLemer Ok,那么Felix Kling回答了这个问题,对吗?
var name = false;
if (o && o.getname()){
    name = true;
}