【问题标题】:javascript reference to undefined propertyjavascript 对未定义属性的引用
【发布时间】:2023-04-08 13:42:01
【问题描述】:

使用 Firefox,在 Firefox 扩展上工作,我不断收到 javascript 警告:

reference to undefined property mySidebar.context.netProgress

我已经尝试了多种测试值的方法:

if (mySidebar.context.netProgress === undefined) {

if (typeof mySidebar.context.netProgress == "undefined") {

if (!mySidebar.context.netProgress) {

if (mySidebar.context.netProgress == undefined) {

但是 Firefox 中的错误控制台每次都会在同一行继续给我警告,有问题的行是我从上面发布代码的行。对值的实际检查导致了警告。

我还设置了一个警报来检查 mySidebar.context 的值,它始终是一个对象,因此我收到的警告不是来自父级。

有什么想法吗?

【问题讨论】:

  • 您也可以在浏览器启动时将其设置为null

标签: javascript firefox firefox-addon


【解决方案1】:

正如 Swingley 所说,您可以使用 Object.prototype.hasOwnProperty() 来检查对象上是否存在直接属性。但是,这不适用于从原型链继承的属性。对于继承和直接这两种情况,您都可以使用in operator

if ("netProgress" in mySidebar.context) {

【讨论】:

  • 是不是太长了?使用 if (mySidebar.context.netProgress) 越来越方便……
【解决方案2】:

尝试对象。hasOwnProperty()

if (mySidebar.context.hasOwnProperty("netProgress")) {

【讨论】:

  • +1,我希望您不介意我在您的帖子中添加示例。请注意,这不适用于通过原型链继承的属性。
  • 请注意hasOwnProperty 检查属性的存在,该属性可能存在并且它的值可能是undefined,参见还有:Difference between undefined and not being defined in Javascript
  • 感谢 CMS,这很好,因为我在尝试添加属性之前使用它来检查属性是否存在。当我删除该属性时,我会使用 delete,所以它对我来说效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2016-02-26
相关资源
最近更新 更多