如何检查一个 JavaScript 布尔值元素是否存在

8
此时,我可以通过以下方式检查一个Node.js对象中的元素是否存在并获取其值:
if(req.body.name) item.name = req.body.name;

然而,如果我想对布尔元素执行相同的操作,则无法正常工作。如果传递的布尔值为true,则没有问题,但是如果传递的布尔值为false,则if语句失败,但是我需要它的值:

if(req.body.active) item.active = req.body.active; // works only if true

有没有更好的方法来检查对象中的元素是否存在并验证其布尔值?


if (req.body && req.body.active !== undefined) { ... } - notgiorgi
5个回答

11

有几个,你可能会想要:

if("active" in req.body)

我选择这个作为解决方案,因为对我来说它是最简短和最清晰的。感谢所有快速回答! - stijnpiron
它看起来是最短的,但如果不是布尔值,它就不能反映价值。 - Nina Scholz
既然在那时,我只需要检查该字段是否存在,这是正确的做法,对吧?赋值发生在之后,我的示例代码只是一个示例,而不是真正使用的功能... - stijnpiron
@stijnpiron,是的,in运算符检查对象或其原型链中是否存在某个属性。 - Jonas Wilms

5
此时,我会检查node.js对象中的元素是否存在,并进行如下取值:
如果(req.body.name) item.name = req.body.name;
如果req.body.name是一个空字符串,此方法也会“失败”(将空字符串放在引号中,因为空名称很奇怪,但可能不是错误)。
我可以考虑以下方法:
1. in:if ('name' in req.body) 2. hasOwnProperty:if (req.body.hasOwnProperty('name')) 3. typeof:if (typeof req.body.name === 'boolean') 或者 if (typeof req.body.name !== 'undefined')
然而,它们都有优缺点,为了完整起见,我想列举一下:
1.如果有人做了类似于 undefined = 'foo' 的操作(这在现代浏览器中可能不可能),那么 typeof 就会失败 2.如果属性存在但被继承了,hasOwnProperty 会失败 3.in 不会失败(这可能不是所需的,具体取决于用例)

2
您可以使用布尔值检查,然后评估该值。
item.active = typeof req.body.name === 'boolean' && req.body.name

0

你应该使用这个代替:req.body.hasOwnProperty('active')

它只会检查属性是否存在。


0

对我来说,下面的代码非常有效:

if (req.body && typeof req.body.name === 'boolean')

它适用于所有情况,包括名称未定义、名称为布尔值、名称不是布尔值或不存在请求体。它处理了所有情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接