我的编程空间,编程开发者的网络收藏夹
学习永远不晚

delete 语法的本质深入解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

delete 语法的本质深入解析

delete 的返回值

delete 语法是用于 JS 删除对象属性和数组元素

返回 boolean 类型

true 代表删除没有发生异常,但不一定是删除成功

false 一定是删除失败

var obj = {
  a: 1,
  b: 2
};
// 删除对象属性
console.log(delete obj.a); // true
// 删除对象不存在的属性
console.log(delete obj.name); // true
// 删除全局对象 obj ,因为 var 声明默认会挂载到全局 window 对象上
console.log(delete obj); // false
console.log(obj); // { b: 2 }

delete 不能删除哪些属性

  • 任何用 var 声明的属性,不能从全局或函数作用域删除
  • 任何用 let 或者 const 声明的属性 ,不能从它声明的作用域删除
  • 不可配置(configurable: false)的属性不能删除
// var
function testVar() {
  var a = 1;
  console.log(delete a); // false
  console.log(a); // 1
}
testVar();
// let const
function testLet() {
  let a = 2;
  console.log(delete a); // false
  console.log(a); // 2
}
testLet();
// configurable
const obj = {};
Object.defineProperty(obj, "name", { configurable: false });
console.log(delete obj.name); // false
console.log("delete undefined", delete undefined);
console.log(Object.getOwnPropertyDescriptor(global, "undefined"));
console.log("delete Infinity", delete Infinity);
console.log("delete NaN", delete NaN);

delete 删除原型上的属性

  • 不会遍历原型链删除
function User() {
  this.name = "云牧";
}
User.prototype.name = "黛玉";
const p = new User();
// 删除的是 p 对象的自身属性
console.log(delete p.name); // true
// p.name 依然可用,因为原型链可以查找到 name
console.log(p.name); // 黛玉
// 删除原型上的属性
console.log(delete User.prototype.name); // true
// 实例和原型上都没有 name
console.log(p.name); // undefined

delete 删除的到底是什么

  • 删除的是操作表达式结果
  • 对于值,字面量或不可达的引用,不操作,直接返回 true
  • 引用类型,删除引用
var nameVar = "nameVar";
nameNotVar = "nameNotVar";
// var 声明的不可以删除
console.log(Object.getOwnPropertyDescriptor(window, "nameVar")); // configurable: false
// 非 var 声明的可以删除
console.log(Object.getOwnPropertyDescriptor(window, "nameNotVar")); // configurable: true

严格模式删除报错

  • 对于 变量,函数名,函数参数SyntaxError
  • 对于 configurable: falseTypeError
  • 典型的 delete super.property :ReferenceError

下面是错误的例子:

"use strict";
// 变量
var name = "name";
delete name;
// 函数和函数参数
function fn() {}
delete fn;
function fn(name) {
  delete name;
}
fm();
// configurableTypeError
const person = {
  name: "帅哥"
};
Object.defineProperty(person, "name", {
  configurable: false
});
delete person.name;
// 严格 refer
class Parent {
  constructor(name) {
    this.name = name;
  }
  getName() {}
}
class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }
  deleteAny() {
    delete super.getName;
  }
}
var child = new Child("child", 18);
child.deleteAny();

以上就是delete 语法的本质深入解析的详细内容,更多关于delete 语法解析的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

delete 语法的本质深入解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

delete 语法的本质深入解析

这篇文章主要为大家介绍了delete 语法的本质深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-02

delete语法的本质是什么

今天小编给大家分享一下delete语法的本质是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。delete 的返回值del
2023-07-05

深入解析:Golang 微服务的本质是什么?

Golang(即Go语言)作为一种快速、高效、易于学习的编程语言,越来越受到开发者的青睐,尤其在微服务领域中有着广泛的应用。本文将深入解析Golang 微服务的本质是什么,并提供具体的代码示例。微服务架构是一种通过将大型应用拆分成一系列小
深入解析:Golang 微服务的本质是什么?
2024-02-29

深入浅析java中集合泛型的本质

深入浅析java中集合泛型的本质?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、初始化两个集合,一个使用泛型,一个不使用ArrayList list1 = new Array
2023-05-31

深入剖析JavaScript try...catch语句:揭示错误处理的本质

JavaScript中的try...catch语句是错误处理机制的重要组成部分,它允许在代码中定义一个代码块,以便在遇到错误时执行。本文将深入剖析try...catch语句的本质,并通过演示代码来演示如何使用它来捕获和处理错误。
深入剖析JavaScript try...catch语句:揭示错误处理的本质
2024-02-23

深度解析:Go语言中goroutine的本质和运行机制

在Go语言中,goroutine是一种轻量级的线程,用于并发执行代码片段。与传统的线程相比,goroutine更加高效,具有更低的内存消耗和更快的启动速度。在本文中,我们将深度解析Go语言中goroutine的本质和运行机制,同时会提供具体
深度解析:Go语言中goroutine的本质和运行机制
2024-03-12

迭代的精髓:深入理解 Python 循环的本质

循环是 Python 中强大的工具,用于重复执行代码块。理解它们的本质对于编写高效且可维护的程序至关重要。本文深入探讨 Python 循环,揭开它们的运作机制,并提供实用示例帮助您掌握它们的精髓。
迭代的精髓:深入理解 Python 循环的本质
2024-02-17

深入解析Go语言的运算符用法

Go语言中运算符的高级用法解析Go语言作为一门现代化的编程语言,提供了丰富的运算符供开发者使用。除了常规的算术运算符和逻辑运算符外,Go语言还提供了一些高级的运算符,可以帮助开发者更加高效地进行编程。本文将对这些高级运算符进行解析,并给出相
深入解析Go语言的运算符用法
2024-01-18

攻克 VUE 模板语法难关:深入解析

Vue 模板语法是 Vue.js 框架的基础,掌握它对于有效构建应用程序至关重要。本文深入解析 Vue 模板语法,从基本语法到高级特性,提供示例和技巧,帮助开发者攻克难关。
攻克 VUE 模板语法难关:深入解析
2024-03-04

ASP语法谜团破解:深入了解脚本代码

ASP是一种脚本语言,用来为动态网页创建交互内容。它与HTML结合,通过脚本代码来实现网页的动态效果。本文将深入浅出地讲解ASP语法,帮助您更好地理解ASP代码。
ASP语法谜团破解:深入了解脚本代码
2024-02-21

深入解析Golang语言的核心特性

Golang(又称Go)是一种由Google开发的开源编程语言,设计用于处理大规模项目,注重简洁、高效和易于编写的特性。本文将深入解析Golang语言的核心特性,包括并发编程、垃圾回收、类型系统等,并结合具体的代码示例进行详细讲解。并发编
深入解析Golang语言的核心特性
2024-02-28

深入解析:Go 语言的运维能力

go 语言在运维方面表现出色。它提供强大的监控工具(如内置 profiler 和日志接口)、异常处理机制(如类型断言和错误处理)、系统管理能力(如 syscall 包和第三方包)以及自动化功能(如 goroutine 和第三方包)。这些能力
深入解析:Go 语言的运维能力
2024-04-08

编程热搜

目录