Javascript:关于删除行为

Javascript:关于删除行为,javascript,overriding,Javascript,Overriding,我正在读一篇关于JS中删除的理解文章 我理解,通过变量声明创建的属性不能删除,或者更准确地说,具有DontDelete属性,而通过属性赋值创建的属性可以删除 但我不明白属性重载是如何与这个想法协同工作的: > var GLOBAL_OBJECT = this; undefined > var declared = "I cannot be deleted"; undefined > delete declared; false > assigned = "I can

我正在读一篇关于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
在我看来,当在变量对象中创建属性时,属性属性属性是预先确定的。因此,当您尝试重写属性时,可以预期它将被重写,但属性属性不会被重写

这是否正确?

您所谓的“覆盖”属性实际上是一个常规赋值。您只需更改变量的值。变量的所有属性都保持不变,包括您提到的DontDelete


在您的示例中,对于
赋值的
变量,该变量是隐式定义的,没有使用
var
关键字声明,因此可以将其删除。

我读这篇文章太匆忙了

这是一篇关于这个话题的文章的引文

请注意,属性是在属性创建期间确定的(即未设置任何属性)。以后的指定不会修改现有属性的属性。理解这种区别很重要


啊,我明白了。我在考虑其他OO语言中的重载原则(即方法重载、运算符重载),其中最新的声明将堆叠或替换现有的声明。