如何检查JavaScript中的对象属性是否未定义?
当前回答
我没有看到(希望我没有错过)任何人在物业前检查该对象。因此,这是最短和最有效的(虽然不一定是最清楚的):
if (obj && obj.prop) {
// Do something;
}
如果obj或obj.prop为undefined、null或“falsy”,If语句将不执行代码块。这通常是大多数代码块语句(在JavaScript中)所需的行为。
更新:(2021 7月2日)
最新版本的JavaScript为可选链接:?。
这可能是检查对象财产是否存在的最明确、最有效的方法。
裁判:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
其他回答
解决方案不正确。在JavaScript中,
null == undefined
将返回true,因为它们都“强制”为布尔值,并且都为false。正确的方法是检查
if (something === undefined)
这是身份运算符。。。
Lodash库中有几个小助手:
isUndefined-检查值是否未定义。
_.isUndefined(undefined) // => true
_.isUndefined(null) // => false
has-检查对象是否包含属性
const object = { 'a': { 'b': 2 } }
_.has(object, 'a.b') // => true
_.has(object, 'a.c') // => false
来自lodash.js。
var undefined;
function isUndefined(value) {
return value === undefined;
}
它创建了一个名为undefined的局部变量,该变量用默认值(即真正的undefineed)初始化,然后将该值与变量undefine进行比较。
更新日期:2019年9月9日
我发现Lodash更新了它的实现。查看我的问题和代码。
要做到防弹,只需使用:
function isUndefined(value) {
return value === void 0;
}
ECMAScript 10引入了一个新特性——可选链接,只有当对象定义为如下时,才可以使用该特性来使用对象的属性:
const userPhone = user?.contactDetails?.phone;
只有在定义了user和contactDetails时,它才会引用phone属性。
裁判。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
如果你这样做
if (myvar == undefined )
{
alert('var does not exists or is not initialized');
}
当变量myvar不存在时,它将失败,因为没有定义myvar,所以脚本被破坏,测试没有效果。
由于窗口对象在函数外部具有全局作用域(默认对象),因此声明将“附加”到窗口对象。
例如:
var myvar = 'test';
全局变量myvar与window.myvar或window['myvar']相同
为了避免在存在全局变量时要测试的错误,最好使用:
if(window.myvar == undefined )
{
alert('var does not exists or is not initialized');
}
一个变量是否真的存在并不重要,它的值是不正确的。否则,用undefined初始化变量是愚蠢的,最好使用值false来初始化。当你知道你声明的所有变量都是用false初始化的时候,你可以简单地检查它的类型或者依赖它!window.myvar检查它是否具有正确/有效的值。因此,即使没有定义变量!window.myvar对于myvar=undefined或myvar=false或myvar=0是相同的。
如果需要特定类型,请测试变量的类型。要加快测试条件,您最好执行以下操作:
if( !window.myvar || typeof window.myvar != 'string' )
{
alert('var does not exists or is not type of string');
}
当第一个简单条件为真时,解释器将跳过下一个测试。
最好使用变量的实例/对象来检查它是否获得了有效值。它更稳定,是一种更好的编程方式。
(y)