如何检查JavaScript中的对象属性是否未定义?
当前回答
以下是我的情况:
我正在使用REST调用的结果。结果应该从JSON解析为JavaScript对象。
有一个错误我需要辩护。如果REST调用的参数不正确,并且用户指定了错误的参数,则REST调用基本上返回为空。
在使用这篇文章来帮助我抵御这一挑战时,我尝试了这样做:
if( typeof restResult.data[0] === "undefined" ) { throw "Some error"; }
对于我的情况,如果restResult.data[0]==“object”,那么我可以安全地开始检查其余成员。如果未定义,则抛出上述错误。
我想说的是,就我的情况而言,本文中之前的所有建议都不起作用。我并不是说我是对的,每个人都是错的。我根本不是一个JavaScript大师,但希望这会对某人有所帮助。
其他回答
以下是我的情况:
我正在使用REST调用的结果。结果应该从JSON解析为JavaScript对象。
有一个错误我需要辩护。如果REST调用的参数不正确,并且用户指定了错误的参数,则REST调用基本上返回为空。
在使用这篇文章来帮助我抵御这一挑战时,我尝试了这样做:
if( typeof restResult.data[0] === "undefined" ) { throw "Some error"; }
对于我的情况,如果restResult.data[0]==“object”,那么我可以安全地开始检查其余成员。如果未定义,则抛出上述错误。
我想说的是,就我的情况而言,本文中之前的所有建议都不起作用。我并不是说我是对的,每个人都是错的。我根本不是一个JavaScript大师,但希望这会对某人有所帮助。
"propertyName" in obj //-> true | false
有一种非常简单的方法。
您可以使用可选链接:
x = {prop:{name:"sajad"}}
console.log(x.prop?.name) // Output is: "sajad"
console.log(x.prop?.lastName) // Output is: undefined
or
if(x.prop?.lastName) // The result of this 'if' statement is false and is not throwing an error
您甚至可以对函数或数组使用可选的链接。
截至2020年年中,这一点尚未得到普遍实施。查看文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
我很惊讶我还没有看到这个建议,但它比使用typeof测试更具特异性。如果您需要知道对象属性是用undefined初始化的还是从未初始化过,请使用Object.getOwnPropertyDescriptor():
// to test someObject.someProperty
var descriptor = Object.getOwnPropertyDescriptor(someObject, 'someProperty');
if (typeof descriptor === 'undefined') {
// was never initialized
} else if (typeof descriptor.value === 'undefined') {
if (descriptor.get || descriptor.set) {
// is an accessor property, defined via getter and setter
} else {
// is initialized with `undefined`
}
} else {
// is initialized with some other value
}
Use:
要检查属性是否未定义,请执行以下操作:
if (typeof something === "undefined") {
alert("undefined");
}
要检查属性是否未定义,请执行以下操作:
if (typeof something !== "undefined") {
alert("not undefined");
}
推荐文章
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- super()失败,错误:TypeError "参数1必须是类型,而不是classobj"当父不继承对象
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?
- 什么时候.then(success, fail)被认为是承诺的反模式?