所以我实际上正在阅读关于"删除"的文件。删除对象属性的方法,我偶然发现了这个"另外,你不能删除全局对象的属性,这些属性是用var关键字声明的。"
所以我所理解的是:让我们这样做。说你创建一个数组:
var testing = ["test1", "test2", "test3"];
然后,如果你试图删除"test1"
属性(顺便说一句,我可以调用数组的元素,这是一个对象,数组对象的属性),或者如果你删除for例如:删除testing.length你赢了不能?我不知道我说的话对你有什么影响,请进一步解释?!
答案 0 :(得分:1)
然后,如果你试图删除“test1”属性(顺便说一句,我可以调用数组的元素,这是一个对象,数组对象的属性)。
该数组没有名为“test1”的属性。它有一个名为"0"
的属性,其值为"test1"
,但将数组视为具有属性通常并不好。数组在技术上是对象,并且可以像常规对象一样添加像“test1”这样的属性,但这几乎总是一个坏主意:
var testing = ['a','b','c'];
testing.test1 = 'hello';
delete testing.test1;
数组元素不是属性,但它们是属性的值,它是元素的整数索引:
var testing = ["test1", "test2", "test3"];
delete testing[0];
使用delete
运算符从数组中删除元素通常不是您想要做的。上面的结果是数组:
[empty, "test2", "test3"]
length
3
。通常,如果要重复删除最后一个元素,则需要使用Array.prototype.splice或shift或pop从数组中删除元素:
var testing = ["test1", "test2", "test3"];
testing.splice(0,1); // Delete 1 element from position 0
// Results in ["test2", "test3"]
答案 1 :(得分:0)
请注意,"test1"
不是属性,而是索引0的值。
使用数组而不是delete
时,您可以使用Array.prototype.filter()并获取与新数组中"test1"
不同的所有元素:
const testing = ["test1", "test2", "test3"];
const result = testing.filter(item => item !== 'test1');
console.log(result);
答案 2 :(得分:0)
此外,您无法删除使用var关键字
声明的全局对象的属性
delete
运算符对变量,仅对属性没有影响。尽管可以使用这些变量,例如window.variable
delete
运算符对这些变量没有影响。
如果您尝试删除" test1"属性
test1
不是属性,而是该数组中的元素。
也许您删除例如:
delete testing.length
数组属性长度是不可配置属性,因此运算符delete
将返回false。
var testing = ["test1", "test2", "test3"]
console.log(delete testing.length);

如果您需要使用运算符delete
从数组中删除元素,则需要放置索引,即:array[3]
:
"删除"的最佳方式数组中的元素正在执行过滤过程,您可以进一步了解函数Array.prototype.filter()
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
delete trees[3];
console.log(trees);

使用函数defineProperty
的非可配置属性的另一个示例:
var Employee = {};
Object.defineProperty(Employee, 'name', {configurable: false});
console.log(delete Employee.name);

您可以从对象中删除可配置属性,如下所示:
var obj = {test1: "test1", test2: "test2"};
console.log(delete obj.test1);
console.log(obj);

或者,如下:
var Employee = {};
Object.defineProperty(Employee, 'name', {configurable: true});
console.log(delete Employee.name);
console.log(Employee)