检查未定义变量与错误变量

LBa*_*ish 6 javascript angularjs eslint

我正在使用 ESLint 检查我的 javascript 代码,发现一条警告“意外使用未定义”

声明是

if (data.items === undefined) {...}
Run Code Online (Sandbox Code Playgroud)

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

要消除此警告,是否适合使用

if (data.items === false) {...}
Run Code Online (Sandbox Code Playgroud)

在这种情况下这两种说法是否等价?

Fel*_*ing 3

不,它们并不等同。为了使它们相等,undefined === false必须是true。但是,===执行严格的相等比较,这意味着不同数据类型的值永远不会相等。是布尔false数据类型的值,是未定义数据类型的值。因此是.undefinedundefined === truefalse


undefined如果您想在不引用的情况下显式测试该值undefined,您可以使用typeof

if (typeof data.items === 'undefined')
Run Code Online (Sandbox Code Playgroud)

如果要测试该属性是否存在items,可以使用in运算符 或.hasOwnPropery

if (!data.hasOwnProperty('items'))
if (!('items' in data))
Run Code Online (Sandbox Code Playgroud)

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

if (!data.items)
Run Code Online (Sandbox Code Playgroud)

如果data.items是一个对象(包括数组),!data.items则将为false。如果是的话undefined,那就会了true