delete操作符

更新日期: 2019-11-27阅读: 1.7k标签: 操作符
delete操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。


语法

delete expression

expression 的计算结果应该是某个属性的引用,例如:

delete object.property
delete object['property']


返回值

对于所有情况都是true,除非属性是一个自己不可配置的属性,在这种情况下,非严格模式返回 false。在严格模式下,如果是属性是一个自己不可配置的属性,会抛出Global_objects/SyntaxError

delete操作符与直接释放内存无关


特殊情况:

1.删除的属性不存在,那么delete将不会起任何作用,但仍会返回true。
2.delete操作只会在自身的属性上起作用。而原型链上具有相同名称的属性可用

function Foo() {
  this.bar = 10;
}
Foo.prototype.bar = 42;

var foo = new Foo();
delete foo.bar;// 返回 true,因为删除的是 foo 对象的自身属性           
console.log(foo.bar);// foo.bar 仍然可用,因为它在原型链上可用。

// 从原型上删除属性
delete Foo.prototype.bar; 
console.log(foo.bar);// 输出 "undefined",因为不能继承这个属性了

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

  • delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)
  • 在对象(object)中的函数是能够用delete操作删除的。

4.何用let或const声明的属性不能够从它被声明的作用域中删除。
5.不可设置的(Non-configurable)属性不能被移除。这意味着像Math,Array内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。当一个属性被设置为不可设置,delete操作将不会有任何效果,并且会返回false。在严格模式下会抛出语法错误(SyntaxError)。
6.删除数组元素
使用delete操作符删除数组总某项元素时,被删除的元素会从该数组中删除,包括其索引,但是数组的length并不会改变。

var arr = [1, 2, 3];
delete arr[1];
console.log(arr); // [ 1, <1 empty item>, 3 ]
console.log(delete arr[1]); // true
console.log(arr[1]); // undefined
console.log(1 in arr); // false
arr[1] = undefined;
console.log(1 in arr); // true

链接: https://www.fly63.com/article/detial/7950

js操作符拾遗

对于js操作符的一些特性和有趣题目的整理。逗号操作符有两个作用,一个是用于当你想要在期望一个表达式的位置包含多个表达式时,可以使用逗号操作符。

JavaScript剩余操作符Rest Operator

剩余操作符和展开操作符的表示方式一样,都是三个点 \\\'...\\\',但是他们的使用场景会不同。定义函数的时候,如果函数的参数以… 为前缀,则改参数是剩余参数(rest parameter)。剩余参数表示参数个数不确定的参数列表

ES新提案:双问号操作符

本文主要讲Gabriel Isenberg撰写的ES提案“Nullish coalescing for JavaScript”。 它提出?? 替换||的运算符,并提供默认值。这里先把这相提案叫作双问号操作符,双问号 ?? 的操作符跟 || 类似,如果给定变量值为 null 或者 undefined

ES6 展开操作符的几个妙用

ES6 新增了...操作符,通常用于在函数中提取剩余参数和展开数组。但其实它的用途不止于此,本文就介绍几个技巧,用它来操作 JavaScript 对象。复制对象的同时,为其添加新的属性。例子中复制了user对象到userWithPass,并添加了 password 属性。

TypeScript typeof 操作符

在 TypeScript 中, typeof 操作符可以用来获取一个变量或对象的类型。在上面代码中,我们通过 typeof 操作符获取 sem 变量的类型并赋值给 Sem 类型变量,之后我们就可以使用 Sem 类型

JS 中强大的操作符

JS 里的操作符大家每天都在使用,还有一些 ES2020、ES2021 新加的实用操作符,这些共同构成了 JS 灵活的语法生态。本文除介绍常用的操作符之外

Js中经常被忽略的两个神奇操作符?. 和 ??

?.和??估计是Javascript两个最为有用并且最经常被忽略的操作符了。这两个操作符最大的作用,就是对于undefined和null的应对,在没有lodash等库的情况下,直接桶过Javascript自身的机制就可以很大的程度上提高程序的健壮性。

一文读懂TS in操作符

上述代码规定 staffCount 是一个对象,属性名为 roles 约束的三个,值为 number 类型:类型变量 k,以此绑定到对象的每一个属性,遍历三个字符串字面量组成的联合类型 roles,number 为每个属性的值的类型

TS typeof 操作符原来有这 5 种用途!

这是一个普通的 JavaScript 对象,在 TypeScript 中你可以使用 type 或 interface 来定义该对象的类型。有了该对象类型之后,你就可以利用 TypeScript 内置的工具类型

JS中鲜为人知的知识点-空值合并运算符(??)

与逻辑或操作符(||)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如0)时。见下面的例子。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!