章节索引 :

delete 操作符

delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。(MDN)

delete 操作符可以删除对象的一个属性。

JavaScript 中的关键字与其他语言略有不同,如 C++ 中的 delete 关键字会释放内存,JavaScript中不会,只有当一个值的引用归零时,才会被释放。

1. 使用 delete

delete 操作符在与操作数运算结束后,会返回一个布尔值,成功返回 true。在属性是不可配置的情况下会返回 false,在严格模式下,则会抛出 TypeError 异常。

var person = {
  age: 16,
};

delete person.age;

console.log(person); // 输出:{}

当一个属性为不可配置的时候:

var person = {};

Object.defineProperty(person, 'age', {
  value: 17,
  writable: true,
  configurable: false,
});

delete person.age; // 返回false

console.log(person); // 输出:{age: 17}

2. 在严格模式下的 delete

如果在严格模式下,对一个不可配置属性进行 delete 操作,则会抛出异常。

'use strict'; // 开启严格模式
var person = {};

Object.defineProperty(person, 'age', {
  value: 17,
  writable: true,
  configurable: false,
});

delete person.age; // TypeError: Cannot delete property 'age'

图片描述

3. 对使用 var 声明的变量进行 delete

使用 var 声明的变量默认是不可配置的,所以对 var 声明的变量进行 delete 操作是无效的。

var number = 996;

delete number; // false

console.log(number);

图片描述

这里的 numberwindow下的一个属性,可以使用 Object.getOwnPropertyDescriptor 来查看属性的描述符。

var number = 996;

Object.getOwnPropertyDescriptor(window, 'number');

图片描述

4. 使用 delete 删除数组成员

delete 可以用于删除数组成员,并且是真正意义的删除,可以让指定的成员变成 empty

var arr = [2, 4, 6, 8, 10];

delete arr[0]; // true

console.log(arr);

图片描述

有关数组 empty 相关的内容可以查阅数组章节。

5. 小结

delete 操作符就是用来删除对象下的属性,但这个属性还有在其他地方被引用,就不会被释放。

前置知识
什么是JavaScript 开发与学习环境准备 调试方案
基础
JavaScript 变量 JavaScript 数据类型 JavaScript if 语句 JavaScript for 语句 JavaScript 算数运算符 JavaScript 比较运算符 JavaScript 逻辑运算符 JavaScript 表达式 JavaScript 函数 JavaScript 对象 JavaScript 字符串 JavaScript 数字 JavaScript 数组 JavaScript switch 语句 JavaScript while 语句 JavaScript break与continue JavaScript with document.cookie
内置对象
JavaScript Function JavaScript Math JavaScript Date JavaScript RegExp JavaScript JSON
JavaScript 与 DOM
什么是DOM DOM和JavaScript的关系 获取和操作 DOM 节点 JavaScript DOM与事件 JavaScript DOM 事件绑定 JavaScript DOM 事件对象 JavaScript DOM 事件流 JavaScript DOM 事件优化 JavaScript DOM 自定义事件
表单处理
使用 JavaScript 校验表单
BOM
BOM window 对象 常用的 BOM 相关对象 BOM 常用属性和方法
AJAX
JavaScript AJAX
进阶知识
JavaScript 异常处理 JavaScript 三元运算符 JavaScript 逗号操作符 JavaScript void JavaScript typeof JavaScript delete JavaScript debugger JavaScript getter &setter JavaScript 原型 JavaScript new操作符和构造函数 JavaScript instanceof JavaScript this JavaScript 严格模式 JavaScript 作用域 JavaScript 闭包 JavaScript 变量提升 JavaScript 对象包装器
常用库
jQuery Lodash moment.js swiper
进阶指南
ECMAScript6 Node.js Babel CSS 预处理器 代码规范 TypeScript Web Components 小程序 Vue / React / Angular JavaScript 关键字
常见疑点与误区
分号问题 对象属性访问问题 this 使用问题 浮点数精度问题 独一无二的 NaN 避免全局污染 控制台观察对象问题 根据环境选择语言特性
扩展
相关资源