编程语言
首页 > 编程语言> > javascript-JS对象空检查-奇怪的JS问题

javascript-JS对象空检查-奇怪的JS问题

作者:互联网

这个问题已经在这里有了答案:            >            Why don’t logical operators (&& and ||) always return a boolean result?                                    8个
>            Javascript AND operator within assignment                                    6个
想象一下这个简单的场景.我有一个变量,它可以是具有一个属性ID的普通JS对象,即一个数字或obj变量可以为null.我有一个简单的test()函数,该函数检查变量是否不为null且必须具有有效的id属性.

var obj = { id: 111 };
function test() {
    return (obj && obj.id);
}

我期望此函数将始终返回布尔值,但实际上,如果未定义obj,则返回undefined;如果对象存在(如上述情况),则返回obj.id的值.为什么此函数返回111而不是true.

我要撕掉我的头发…请照亮我的思想:)

解决方法:

定义obj后,为什么(obj&&obj.id)返回111?

The logical AND (&&) operator returns expr1 if it can be converted to false; otherwise, returns expr2.

MDN: Logical Operators – Description(略作释义)

expr1(obj)无法转换为false,因此它返回expr2(111).

为什么它不返回true?

Logical operators are typically used with Boolean (logical) values. When they are, they return a Boolean value. However, the && and || actually return the value of one of the specified operands, so if these operators are used with non-Boolean values, they may return a non-Boolean value.

MDN: Logical Operators

因为您正在将逻辑运算符与非布尔值一起使用,所以结果也将是非布尔值.

标签:null-check,typechecking,javascript
来源: https://codeday.me/bug/20191024/1924020.html