【问题标题】:Deleting and making it null difference in Javascript在Javascript中删除并使其无效
【发布时间】:2019-03-10 17:45:40
【问题描述】:
var s= {type: "beetle", price : "xxx", popular: "yes" ,.... };

如果我必须删除s 的所有属性,我应该怎么做?

  • 应该是delete s.type; delete s.price; delete s.popular .. 等等。

  • 还是s = null;

  • 或者s超出范围会删除属性吗?

【问题讨论】:

  • delete s 不执行任何操作 - delete 运算符用于删除对象的 属性,而不是对象本身。见help
  • 没有。但是你可以这样做 s = undefined; 这样你就可以删除变量了。
  • 是的,我的意思是删除 s.car;忘了把它写成s.car。谢谢
  • 最后说明:delete s.cars = null delete s.car; console.log(s) // 打印 {} s = null; console.log(s) //print null 不同跨度>

标签: javascript


【解决方案1】:

它们根本不一样。删除scar 属性仍将其保留为对象- 诚然,它是一个没有自己属性的“空”对象,但这与null 的值非常不同。一方面,{} 仍然是一个对象,并委托给Object.prototype,因此可以访问像s.toString()(在内部用于强制转换为字符串值)和s.hasOwnProperty(propname) - null 这样的方法。根本无法调用任何方法的原始值。另一方面,{} 如果强制为布尔值(例如,如果您使用 if (s)),则变为 true,而 null 则强制为 false。

所以这些值实际上表现得非常不同。

【讨论】:

  • 同意,但我关心的不是s,主要是删除。是否以两种方式删除属性?。
  • @vishnuprasad.v 我不完全确定我理解这个问题。在这两种情况下,属性都会被删除,因为s.car 将不再起作用。但请注意,如果snull,那么s.car 会引发TypeError,而如果s{}(因为它在delete s.car 之后),s.car 不会引发错误并返回@ 987654342@。问题背后的一些额外背景将有助于给出有用的答案。
  • 谢谢罗宾!我已经更新了这个问题,如果你觉得这个问题令人信服,请告诉我。谢谢
  • Zignmond - 谢谢你实际上给了我答案 - s.car 在这两种情况下都被删除了,所以我可以使用 s = null 来删除它们,而不是一一删除所有属性。这只是为了删除我不再需要的属性。
【解决方案2】:

当你设置一个属性等于null时,它仍然存在,但没有任何值,但如果你删除它,它就不再存在了。

【讨论】:

  • 如上所述,属性不设为空,具有该属性的变量设为空。谢谢
【解决方案3】:

在 MDN 中它说,“JavaScript 删除操作符从对象中删除一个属性;如果不再持有对同一属性的引用,它最终会自动释放。”

所以完全不同的一个对象是设置一个对象为空对象,另一个不起作用,因为 s 不是任何对象的属性。

【讨论】:

  • 对不起,我第一次没有正确输入。当我把我的问题说清楚时,请立即调查。提前致谢!
  • @vishnuprasad.v 使用 s = null 使 s 成为空对象,使用 delete s.car 使 s 成为空对象。
  • 在这两种情况下,财产车会发生什么?这就是我的问题。
猜你喜欢
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多