解读云计算产品的可用性测试方法

JavaScript delete运算符从对象中删除属性,它将释放对被删除属性持有的对象的所有引用。

在本文中,我们将研究如何使用 delete 运算符以及它在不同情况下的行为。

JavaScript delete操作符用过吗?delete操作符详解

基本使用

要使用 delete 操作符,只需在要删除的任何属性表达式之前写入 delete 即可。

例如,我们有对象:

const obj = {
a: 1,
b: 2
};

然后我们需要删除属性 a

delete obj.a;

或者

delete obj[\'a\'];

返回值

delete 操作符对于所有情况都返回 true,除非删除的属性是自己的不可配置属性。

如果我们试图删除一个属于自身不可配置属性的属性,则将以非严格模式返回 false

特点

如果我们要删除的属性不存在,则 delete 将不执行任何操作并返回 true

如果对象的原型链中存在相同名称的属性,则删除后该对象将使用原型链中的属性。

不能从全局作用域或函数作用域中删除用 var 声明的任何属性。

不能删除全局范围内的任何函数。

function foo() {
var a = 1;
return a;
}

delete foo // false
foo() // 1

同样,任何带有 letconst 的属性都不能从定义它们的范围中删除。

无法删除不可配置的属性。因此,来自内置对象(如 MathArrayObject)或任何创建为不可配置的属性的属性不能被删除。

var obj = {
a: 1
}
Object.freeze(obj) // 冻结obj
delete obj.a // 删除属性a无效
console.log(obj) // { a: 1 }

不可配置的属性意味着我们不能更改它们的属性描述符。

严格模式

如果我们尝试在严格模式下删除变量,则会收到语法错误。

非严格模式

如果我们尝试删除变量,则非严格模式将返回 false

删除数组元素

我们可以对数组元素使用 delete,该元素将从数组中删除,但长度不会改变。

例如,如果我们有:

const arr = [1, 2, 3];
delete arr[1];

然后我们得到:

[1, empty, 3]

当我们记录长度时,将得到3。

如果我们使用 in 运算符检查索引是否存在,如下所示:

const arr = [1, 2, 3];
delete arr[1];
console.log(1 in arr);

我们得到了 false

如果数组元素存在,但是有一个未定义的值,我们应该将其设置undefined,而不是使用 delete 操作符。

如我们所见,在数组上使用 delete 是古怪的。因此,如果我们要通过索引删除数组条目,则应该使用 splice

const arr = [1, 2, 3];
arr.splice(1, 1);

splice 的第一个参数指定我们要删除的数组元素的索引。第二个参数是我们要从第一个参数指示的索引开始删除的元素个数。

然后,当我们再次登录 arr 时,我们得到:

[1, 3]

总结

delete操作符用于从对象中删除属性,如果属性是自己的且可配置的,那么它将起作用。

否则,它将在非严格模式下返回 false,并在严格模式下引发SyntaxError。

它不应与数组一起使用,因为它的行为不一致。

日常工作中你有使用过 delete 操作符吗?


本头条号聚焦大前端技术和程序员成长,如果对你有所启发和帮助,可以点个关注、收藏,也可以留言讨论,这是对作者的最大鼓励。

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

下一篇

求人办事,先送礼还是后送礼?做到这3点,人脉就会越来越广

评论已经被关闭。

插入图片
返回顶部