[AngularJS]未定义变量 vs 虚假变量检查

发布时间: 2017/4/16 21:39:30
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我用 ESLint 来检查我的 javascript 代码招领"意外使用未定义"的警告

该语句是

if (data.items === undefined) {...}

Data.items 等于一个 JSON 对象通常情况下,但在某些情况下它可能只是未定义,我想采取单独行动,如果出现这种情况。

若要消除此警告,它适合使用呢

if (data.items === false) {...}

这两个语句是等效在这些情况下的吗?

解决方法 1:

不,他们不是等效。他们是等价的 undefined === false 必须是 true 。然而, === 执行严格的相等比较,意味着不同的数据类型的值永远不会平等。 false 是一个值的布尔值的数据类型, undefined未定义的数据类型的值。因此 undefined === truefalse


如果你想要测试的值 undefined 明确而不引用 undefined ,你可以使用 typeof :

if (typeof data.items === 'undefined')

如果你想要测试存在的属性 items ,你可以使用 in 运算符或 .hasOwnPropery :

if (!data.hasOwnProperty('items'))
if (!('items' in data))

如果知道的可能值 data.itemsundefined 或一个对象,你可以简单地让 JavaScript 类型转换为你的工作和使用

if (!data.items)

如果 data.items 是一个对象 (包括数组) !data.items 将是 false 。如果它是 undefined ,它将是 true

官方微信
官方QQ群
31647020