js中的delete

ECMAScript定义的对象就是:无序属性的集合,属性的值可以是任意类型的数据。(一组名值对)
ECMAScript在定义只有内部才用的特性时,描述了属性的各种特征,这些特性是为了JS引擎的实现,所以不能直接访问。可以视为内部值。
其中一个特性是configurable,它表示能否通过delete删除属性,以及除writable特性外的其他特性是否能被修改。

这里提到的delete,它的作用就是删除对象的一个属性的。具体地说就是delete 操作符会从某个对象上移除指定属性。成功删除的时候回返回 true,否则返回 false
语法:

delete object.property 
delete object['property']

而返回值有一点特别的是,对于所有情况都是true,除非属性是一个自己的不可配置属性,在这种情况下,非严格模式返回 false,而严格模式下则是直截了当的报错了。如下

var obj = {}
Object.defineProperty(obj, 'a', {
  value: 1,
  configurable: false
})
delete obj.a // false
// 如果'use strict',Uncaught TypeError...

其他关于delete操作符的特点:

  1. delete操作只会在自身的属性上起作用(原型链上的属性,delete了以后不会删除该属性,虽然返回值是true)
  2. var、let、const创建的属性不能被delete操作删除。
var a = 1
delete a // false
let b = 2
delete b //true
console.log(b) // 2
const c = 3
delete c //true
console.log(c) // 3
  1. delete也可以用于删除数组元素
var arr = [1, 2, 3, 4]
delete arr[0]
console.log(arr) // [undefined x 1, 2, 3, 4]

值得注意的是,arr数组的length属性在delete操作后没有变。数组在控制台打印出的结果是被删除的位置,元素显示为undefined x 1。这里和数组元素单纯为undefined还是有区别的。arr变成了稀疏数组,而[undefined, 2, 3, 4]是密集数组。

另外,怎么设置属性的内在特性configurable。经常用的办法是Object.defineProperty()。另外通过Object.create(prototype, propertiesObject)创建对象,通过设置propertiesObject也可以设置属性的各种特征。

你可能感兴趣的:(js中的delete)