访问有时为空对象的属性而不会出错[重复]

Posted

技术标签:

【中文标题】访问有时为空对象的属性而不会出错[重复]【英文标题】:Access a property of a sometimes null object without an error [duplicate] 【发布时间】:2014-06-30 02:55:15 【问题描述】:

javascript中,我经常想访问一个可能不存在的对象的属性。

例如:

var foo = someObject.myProperty

但是,如果 someObject 未定义,这将引发错误。访问可能为 null 的对象的属性,如果不存在则简单地返回 false 或 null 的常规方法是什么?

在 Ruby 中,我可以使用 someObject.try(:myProperty)。有 JS 等价物吗?

【问题讨论】:

检查其类型是否未定义是一种方法。 【参考方案1】:

我认为没有与您在 JavaScript 中所要求的直接等价的内容。但是我们可以编写一些 util 方法来做同样的事情。

Object.prototype.safeGet = function(key) 
    return this? this[key] : false;

var nullObject = null;
console.log(Object.safeGet.call(nullObject, 'invalid'));

这是 JSFiddle:http://jsfiddle.net/LBsY7/1/

【讨论】:

handy 得心应手,谢谢 Object.prototype.safeGet 让我崩溃了 botbuilder.. 奇怪...【参考方案2】:

如果你经常请求,你可以创建一个检查它的函数,比如

function getValueOfNull(obj, prop) 
  return( obj == null ? undefined : obj[prop] );

【讨论】:

【参考方案3】:

建议

 if(typeof someObject != 'undefined')
    var foo = someObject.myProperty
 else 
    return false; //or whatever

您也可以在property 上添加控件,方法是:

if(someObject.myProperty)

很明显里面是第一个if

或者(“也许”不太正确)

if(someObject)
    var foo = someObject.myProperty

第二个示例应该可以工作,因为 undefined 被识别为 falsy value

【讨论】:

我认为唐要求单行上下文,“如果”上下文很明显

以上是关于访问有时为空对象的属性而不会出错[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c#异常可空对象必须要有一个值怎么解决

规避空指针异常

无法访问已释放的对象,该怎么解决

2021-04-09【技术】关于空数组和空对象为true的问题

访问对象数组-运行时 System.NullReferenceException [重复]

java 判断对象的所有属性是不是为空解决方案