我正在阅读interesting article,了解JS中的删除。
我了解通过变量声明 创建的属性不能被删除,或者更准确地说,具有DontDelete
属性,而属性是通过属性创建的分配 可以删除。
但是我对财产重载如何与这个想法一起工作感到困惑:
> var GLOBAL_OBJECT = this;
undefined
> var declared = "I cannot be deleted";
undefined
> delete declared;
false
> assigned = "I can be deleted";
'I can be deleted'
> delete assigned;
true
> // Now, I will override `declared` ...
> declared = "I am overrided - now deletable?";
'I am overrided - now deletable?'
> declared;
'I am overrided - now deletable?'
> delete declared;
false
在我看来,当在变量对象中创建属性时,属性属性预定。因此,当您尝试覆盖属性时,可以预期它将被覆盖,但属性属性不会被覆盖。
这是对的吗?
答案 0 :(得分:0)
你所谓的“覆盖”属性实际上是一项常规任务。您只需更改变量的值即可。变量的所有属性都保持不变,包括你提到的DontDelete。
对于示例中的assigned
变量,变量是隐式定义的,未使用var
关键字声明,这就是使其能够被删除的原因。
答案 1 :(得分:0)
我太匆忙地读了这篇文章。
以下是解决此主题的文章的引用,
请注意,在属性创建期间,确定了属性(即没有设置属性)。以后的分配不会修改现有属性的属性。了解这种区别非常重要。