delete 运算符

您所在的位置:网站首页 计算器上的del是什么意思啊 delete 运算符

delete 运算符

2023-08-29 02:27| 来源: 网络整理| 查看: 265

delete 运算符与其他像 typeof 这样的一元运算符具有相同的优先级。因此,它接受任何由更高优先级的运算符形成的表达式。然而,在严格模式下,以下形式会导致早期语法错误:

js

delete identifier; delete object.#privateProperty;

因为类自动处于严格模式,而私有属性只能在类体内合法引用,这意味着私有属性永远不能被删除。虽然 delete identifier 在 identifier 指的是全局对象的可配置属性时可能有效,但是你应该避免这种形式,而是用 globalThis 作为前缀。

虽然其他表达式是可以接受的,但是它们并不导致有意义的行为:

js

delete console.log(1); // 输出 1,返回 true,但是没有删除任何东西

delete 运算符从一个对象中删除一个给定的属性。在成功删除时,它将返回 true,否则将返回 false。不像一般人认为的那样(也许是由于其他编程语言,如 C++ 中的 delete),delete 操作符与直接释放内存没有关系。内存管理是通过破坏引用间接完成的。更多细节请参见内存管理页面。

但是,以下情况需要重点考虑:

如果你试图删除的属性不存在,那么 delete 将不会起任何作用,但仍会返回 true。 delete 只影响自身属性。如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性。 不可配置的属性不能被移除。这意味着像 Math、Array、Object 这些内置对象的属性以及使用 Object.defineProperty() 方法设置为不可配置的属性不能被删除。 删除包括函数参数内的变量永远不会奏效。delete variable 会在严格模式下抛出 SyntaxError 错误,非严格模式下不会有任何效果。 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除,因为即使它们可能附加到全局对象上,它们也是不可配置的。 任何使用 let 或 const 声明的属性不能够从它被声明的作用域中删除,因为它们没有附加到任何对象上。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3