When/If 在 Javascript 中使用删除
When/If to use Delete in Javascript
我刚刚发现 javascript 有一个删除语句。我已经阅读了一些有关它的内容,但并没有变得更聪明。
所以我希望得到一个关于何时应该使用它的功能定义,如果有的话。所以我知道我可以删除对象的属性;正如这个 fiddle:
所表明的那样
var myData = {a:"hello",b:"world"};
alert(myData.b);
delete myData.b;
alert(myData.b);
其中显示 "world" 然后在连续警报中未定义。但是,您不能像这样使用 delete(就像在 C++ 中那样):
function data() {
this.attribute1 = "aww";
this.attribute2 = "poo";
}
var myData = new data();
delete myData;
这里delete returns false表示不能删除myData。我以前主要在 C++ 中工作,这就像删除的整个想法。我想不出我会使用 delete 删除属性的任何理由。我是否应该担心使用 delete 来标记要释放的内存?就像我做这样的事情一样。
var myData = new data();
... //do stuff
myData = new data();
加法
所以我把那个让我困惑的post挖了出来。关于此 question 的最赞回答指出(引用自 Apple Javascript 编码指南):
Use delete statements. Whenever you create an object using a new statement, pair it with a delete statement. This ensures that all of the memory associated with the object, including its property name, is available for garbage collection. The delete statement is discussed more in “Freeing Objects.”
所以,如果我理解我得到的一些评论和答案,这个说法是不准确的,因为你甚至不能对使用 new 语句创建的对象调用 delete。
delete
本身具体说明:
The delete operator removes a property from an object.
如果您不想将 属性 包含在发送到服务器的数据中,或者不希望它被其他代码使用,例如,自动获取对象数据并将其转换为 table.
一般来说,您永远不会将它用于内存管理,一个可能的例外是,如果您在一个对象中有大量您明确不需要的数据(例如从后端接收的数据)。
根据 mozilla 的开发者文档,delete
不能那样工作。
delete
运算符从对象中删除 属性,它不会删除对象本身。
因此,与其像您演示的那样使用它,不如像下面这样使用它:
myGlobalObject = {};
var myObject = {};
myObject.propertyA = "blah";
// Do some stuff
delete myObject.propertyA; // This works because you're deleting a property off myObject
delete myGlobalObject; // This works because myGlobalObject is a property of the global object.
delete myObject; // This does NOT work - most likely because you declared it using the var keyword
虽然这实际上并没有进行垃圾收集。此外,如果 myObject
在具有 propertyA
的链上有一个原型,它仍然会通过原型继承 属性。
如需更深入的信息,请随时查看开发人员文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
我刚刚发现 javascript 有一个删除语句。我已经阅读了一些有关它的内容,但并没有变得更聪明。
所以我希望得到一个关于何时应该使用它的功能定义,如果有的话。所以我知道我可以删除对象的属性;正如这个 fiddle:
所表明的那样var myData = {a:"hello",b:"world"};
alert(myData.b);
delete myData.b;
alert(myData.b);
其中显示 "world" 然后在连续警报中未定义。但是,您不能像这样使用 delete(就像在 C++ 中那样):
function data() {
this.attribute1 = "aww";
this.attribute2 = "poo";
}
var myData = new data();
delete myData;
这里delete returns false表示不能删除myData。我以前主要在 C++ 中工作,这就像删除的整个想法。我想不出我会使用 delete 删除属性的任何理由。我是否应该担心使用 delete 来标记要释放的内存?就像我做这样的事情一样。
var myData = new data();
... //do stuff
myData = new data();
加法
所以我把那个让我困惑的post挖了出来。关于此 question 的最赞回答指出(引用自 Apple Javascript 编码指南):
Use delete statements. Whenever you create an object using a new statement, pair it with a delete statement. This ensures that all of the memory associated with the object, including its property name, is available for garbage collection. The delete statement is discussed more in “Freeing Objects.”
所以,如果我理解我得到的一些评论和答案,这个说法是不准确的,因为你甚至不能对使用 new 语句创建的对象调用 delete。
delete
本身具体说明:
The delete operator removes a property from an object.
如果您不想将 属性 包含在发送到服务器的数据中,或者不希望它被其他代码使用,例如,自动获取对象数据并将其转换为 table.
一般来说,您永远不会将它用于内存管理,一个可能的例外是,如果您在一个对象中有大量您明确不需要的数据(例如从后端接收的数据)。
根据 mozilla 的开发者文档,delete
不能那样工作。
delete
运算符从对象中删除 属性,它不会删除对象本身。
因此,与其像您演示的那样使用它,不如像下面这样使用它:
myGlobalObject = {};
var myObject = {};
myObject.propertyA = "blah";
// Do some stuff
delete myObject.propertyA; // This works because you're deleting a property off myObject
delete myGlobalObject; // This works because myGlobalObject is a property of the global object.
delete myObject; // This does NOT work - most likely because you declared it using the var keyword
虽然这实际上并没有进行垃圾收集。此外,如果 myObject
在具有 propertyA
的链上有一个原型,它仍然会通过原型继承 属性。
如需更深入的信息,请随时查看开发人员文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete