想象一下这个简单的场景。我有一个变量,它可以是带有一个属性 ID 的普通 JS 对象,即一个数字或 obj 变量可以为 null。我有简单的 test() 函数,它检查变量是否不为 null 并且它必须具有有效的 id 属性。
var obj = { id: 111 };
function test() {
return (obj && obj.id);
}
我期望这个函数总是返回布尔值,但事实上,如果 obj 未定义,它会返回 undefined ,或者如果对象存在,就像上面的情况一样,它会返回 obj.id 的值。为什么这个函数返回 111 而不是 true。
我要扯掉我的头发......请照亮我的思想:)
这是一个常见的误解。在 JS 中(与 PHP 等不同),像这样的表达式x && y
做这个:
- 执行表达式
x
- 如果表达式
x
返回 true,然后执行表达式y
还有并返回它(y
)。否则返回x
(在这种情况下这是错误的,例如0
, ''
, false
, null
, undefined
).
换句话说,它的工作方式更像是三元表达式x ? y : z
.
如果你想要一个布尔值,那么使用!!(x && y)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)