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 returnsexpr1
if it can be converted tofalse
; otherwise, returnsexpr2
.
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.
因为您正在将逻辑运算符与非布尔值一起使用,所以结果也将是非布尔值.
标签:null-check,typechecking,javascript 来源: https://codeday.me/bug/20191024/1924020.html