当前位置: 首页 > news >正文

你知道 delete 删除属性时的一些细节吗?

探究 delete 的一些细节,起源于刚刚做过的一道笔试,原题如下:

a = 1;
const b = 2;
console.log(delete a);
console.log(delete b); 
// 输出结果是?
// 答:true false

我可从来没用过 delete 的返回值,但凡犹豫一秒都是对自己的不自信,所以立马选择 undefined,笔试结束后回想起来,怎么会出这么奇怪的题,于是自己实际试了一下,真是不试不知道,一试吓一跳啊!!!

2023-09-21-21-32-59

delete 关键字是其实有返回值的!并且 delete 还是有一些细节/规则的

  • 如果删除的属性不存在于对象本身,delete 不起任何作用,但仍会返回 true !

  • delete 只会删除对象自身属性,不会删除对象原型链上的属性!

    function A() {}
    A.prototype.b = 1;
    const a = new A();
    console.log(delete a.b, a.b); // true 1 (删除对象自身不存在属性时返回true,并且无法删除原型链上的属性)
    
  • 不可配置的属性不能被删除,返回 false !

  • 无法直接删除有声明的变量(包括函数参数),返回 false !

    delete variable 在严格模式下抛出 SyntaxError 错误

    • 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除,因为即使它们可能附加到全局对象上,它们也是不可配置的。
    • 任何使用 let 或 const 声明的属性不能够从它被声明的作用域中删除,因为它们没有附加到任何对象上。

现在看来同程旅行还是保守了,要是现在的我,我估计会出下面的题:

a = 1; // 绑定到了 globalThis 对象中
var b = 2; // 绑定到了 globalThis 对象中
const obj = {};
const d = 3;
let e = 4;
console.log(Object.getOwnPropertyDescriptor(globalThis, 'a').configurable); // true
console.log(Object.getOwnPropertyDescriptor(globalThis, 'b').configurable); // false(通过var定义的全局变量虽然会被绑定到globalThis中,但它是不可配置的!)console.log(delete a); // true (a不是一个有声明的变量,这时会去globalThis上找,把globalThis.a给删了)
console.log(delete b, b); // false 2 (下面单独说)
console.log(delete obj, obj); // false {} (对象 obj 没有被删,因为 obj 是 const 声明)
console.log(delete obj.c, obj.c); // true undefined (删除一个原本就不存在的属性返回 true )
console.log(delete d, d); // false 3 (变量 d 没有被删,因为它是 const 声明)
console.log(delete e, e); // false 4 (变量 e 没有被删,因为它是 let 声明)
console.log(delete f); // true(删除一个原本就不存在的属性返回 true )

globalThis 就是全局对象,浏览器下指向 window、node下指向 global。

console.log(delete b, b);没有把 b 删除,我们有两种解释:

  1. 跟 const、let 声明一样,var 声明的变量无法直接被删除。
  2. b 没被删除是因为,当 delete 去 globalThis 上找它时,发现它是不可配置的,所以无法删除。

为了简单理解和减少歧义,我更认同 1 的解释(你可以想一下 2 的解释会引发哪些歧义),如果您有更好的理解,欢迎评论区留言!

var 声明的全局变量是不可配置的这个细节在“谈谈 var、const、let 的区别”的这个面试题中可以主动展开说一下🧐

相关文章:

你知道 delete 删除属性时的一些细节吗?

探究 delete 的一些细节,起源于刚刚做过的一道笔试,原题如下: a 1; const b 2; console.log(delete a); console.log(delete b); // 输出结果是? // 答:true false我可从来没用过 delete 的返回值,但凡…...

Blender入门——快捷键

视角控制 旋转视角:鼠标中键摁住即可旋转平移视角:shift中远近视角:中键滚动 物体控制 移动物体:G旋转物体:R缩放物体:S回复变换:AltG,R,S新建物体:shiftA复制物体:shiftD删除物体&a…...

实例讲解Spring boot动态切换数据源

前言 在公司的系统里,由于数据量较大,所以配置了多个数据源,它会根据用户所在的地区去查询那一个数据库,这样就产生了动态切换数据源的场景。 今天,就模拟一下在主库查询订单信息查询不到的时候,切换数据…...

调整网络时需要注意的事项

这段时间调整网络,涉及的计算机多,Vlan也多,不小心的动作会给自己造成很大的麻烦,因为毕竟我也只是一个网络的初学者,平时虽然是网管,只是作为一项普通的工作。 准备工作做得不细致,可能出现的问…...

OpenCV自学笔记二十二:绘图及交互

一、绘图基础 下面是关于OpenCV绘图基础函数的说明和举例: 1. cv2.line():绘制直线 cv2.line(img, pt1, pt2, color, thickness, lineType) - img: 需要绘制直线的图像。 - pt1: 直线起始点坐标。 - pt2: 直线结束点坐标。 - color: 直线颜色&…...

【自学开发之旅】Flask-会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。 以上是基…...

数据结构与算法--排序算法复习

目录 1.三种常见的简单排序: 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论: 1.三种常见的简单排序: 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…...

python随手小练1

题目: 使用python做一个简单的英雄联盟商城登录界面 具体操作: print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…...

gym_unity学习笔记

最近学了一段时间gym_unity,把一些资料留在这里 实例 实例gym_unity训练RollerBall:https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall:https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…...

(三十)大数据实战——HBase集成部署安装Phoenix

前言 Phoenix 是一个开源的分布式关系型数据库查询引擎,它基于 Apache HBase构建。它提供了在 Hadoop 生态系统中使用 SQL查询和事务处理的能力。本节内容我们主要介绍一下Hbase如何集成部署安装Phoenix服务工具,并集成hive框架,能够快速、灵…...

【Python基础】S01E03 元组

P01S03 元组 定义元组元组无法修改定义一个元素的元素 修改元组变量方案一:关联新元组方案二:转换为列表 列表是可修改的,对于处理网站的用户列表或游戏中的角色列表至关重要。然而我们有时候需要创建一系列不可修改的元素,元组可…...

【算法-双指针思想】

双指针思想 双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。 定义快慢指针 快指针: 寻找新数组的元素 ,新数组就是不含有目标元素的数组 慢指针: 指向更新 新数组下…...

uni-app实现点击复制按钮 复制内容

注意:uni.setClipboardData({})里面的data参数必须是字符串类型这个是大坑 第一种 <view>{{orderId}}</view> //复制的内容 <button click"copy(orderId)">复制</button>copy(value) {uni.setClipboardData({data: value , // 这里是个坑接…...

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化 第14章 Qt 5多国语言国际化14.1 基本概念14.1.1 国际化支持的实现14.1.2 翻译工作&#xff1a;“*.qm”文件的生成 14.2 【实例】14.2.1 简单测试14.2.2 选择语言翻译文字 本章相关例程源码下载1.Qt5开发及实例_CH1401.rar 下载2.…...

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…...

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉&#xff0c;点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…...

01_Bootstrap基础组件01

1 什么是 Bootstrap&#xff1f; Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的&#xff0c;它简洁灵活&#xff0c;使 Web 开发更加快捷。它对 HTML、CSS 和 JavaScript 进行了封装&#xff0c;使它们…...

Java:OGNL对象图导航语言基本使用示例

OGNL是Object Graphic Navigation Language(对象图导航语言) 文档 https://commons.apache.org/proper/commons-ognl/language-guide.htmlhttps://github.com/orphan-oss/ognlhttps://ognl.orphan.software/developer-guide 引入依赖 <!-- https://mvnrepository.com/ar…...

中科院预警名单

2023年预警名单 (fenqubiao.com) 如果论文投稿到中国科学院预警期刊,可能会面临以下情况: 1. 预警期刊一般审稿周期长,容易出现迟迟不见回音的情况。 2. 这类期刊的学术质量参差不齐,接受论文的学术标准可能不严格。 3. 预警期刊发表论文的学术影响力比较有限,不容易为作者…...

Qt QCustomPlot介绍

介绍 主要介绍qcustomplot及其用法 最新版本:QCustomPlot Patch Release 2.1.1//November 6, 2022 下载:https://www.qcustomplot.com/index.php/download 官网:https://www.qcustomplot.com/index.php 简单使用 mainwindow.h /**************************************…...

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…...

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…...

Nodejs 相关知识

Nodejs是一个js运行环境&#xff0c;可以让js开发后端程序&#xff0c;实现几乎其他后端语言实现的所有功能&#xff0c;能够让js与其他后端语言平起平坐。 nodejs是基于v8引擎&#xff0c;v8是Google发布的开源js引擎&#xff0c;本身就是用于chrome浏览器的js解释部分&#…...

【vue+elementUI】输入框样式、选择器样式、树形选择器和下拉框样式修改

输入框样式、选择器样式和下拉框样式修改 1、输入框和选择器的样式修改&#xff1a;2、下拉弹框样式A. 选择器的下拉弹框样式修改B. 时间选择器的下拉弹框样式修改C. vue-treeselect树形下拉框样式 1、输入框和选择器的样式修改&#xff1a; 写在style中不能加scoped&#xff0…...

JavaScript - canvas - 放大镜

效果 示例 项目结构&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>放大镜</title><style type"text/css">div {width: 200px;height: 200px;display: inline-bl…...

PY32F003F18之输入捕获

输入捕获是定时器的功能之一&#xff0c;配合外部引脚&#xff0c;捕获脉宽时间或采集周期。 CPU中的定时器最基本的功能就是计数功能&#xff0c;其次是输入捕获(IC)&#xff0c;再次就是比较输出(OC)&#xff0c;还有就是使用引脚对外部时钟进行计数&#xff0c;触发信号捕捉…...

科目三基础四项(一)

​ 第一天&#xff0c;基础操作&#xff0c;仪表&#xff0c;方向&#xff0c;挡位 按照模块来 1、方向盘两手在两侧 ​ 编辑 转向时的角度&#xff0c;只用&#xff1a;向左540&#xff0c;向右180 向左打和向右打的角度要抵消&#xff0c;回正 掉头向左打满再回 注意…...

C语言入门Day_24 函数与指针

目录 前言&#xff1a; 1.指针和数组 2.函数和指针 3.易错点 4.思维导图 前言&#xff1a; 我们知道数组是用来存储多个数据的&#xff0c;以及我们可以用指针来指向一个变量。那么我们可以用指针来指向一个数组中的数据么&#xff1f; 指针除了可以像指向一个变量一样指…...

9月21日,每日信息差

今天是2023年9月21日&#xff0c;以下是为您准备的14条信息差 第一、谷歌高管已经广泛讨论了在2027年之前将博通作为人工智能芯片供应商的可能性 第二、清华系团队宣布研发出千亿参数“制药版ChatGPT”&#xff0c;覆盖药物立项、临床前研究、临床试验的各阶段&#xff0c;作…...

【FAQ】安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

学ui设计/南宁网站优化

今年已经来到了兔年&#xff0c;记得去年的时候&#xff0c;看到过不少开发者用Compose画过老虎&#xff0c;各种各样的老虎都有&#xff0c;那既然已经是兔年了&#xff0c;忽然也想着用Compose来画只兔子试试看&#xff0c;顺便练练手&#xff0c;毕竟也好久没碰Compose了 准…...

厦门网站建设建设公司/搜索引擎营销例子

问题描述&#xff1a;一个datatable表格列表页面&#xff0c;弹出页面也具有datatable表格&#xff0c;弹出后&#xff0c;列表页面点击刷新按钮重新加载datatable&#xff0c;出现两个分页工具&#xff0c;在点击也仍旧是两个 截图&#xff1a; 分析结果&#xff1a; js文…...

如何做一张图片的网站/关键词推广是什么

fileter表案例 要求如下&#xff1a;只针对filter表&#xff0c;预设策略INPUT链DROP&#xff0c;其他两个链ACCEPT&#xff0c;然后针对192.168.204.0/24开通22端口&#xff0c;对所有网段开放80端口&#xff0c;对所有网段开放21端口。这个需求不算复杂&#xff0c;但是因为有…...

最专业的网站开发公司哪家最专业/百度问答我要提问

屏幕翻滚类命令Ctrlu&#xff1a;向文件首翻半屏Ctrld&#xff1a;向文件尾翻半屏Ctrlf&#xff1a;向文件尾翻一屏Ctrlb&#xff1b;向文件首翻一屏nz&#xff1a;将第n行滚至屏幕顶部&#xff0c;不指定n时将当前行滚至屏幕顶部。 转载于:https://www.cnblogs.com/monmonde/p…...

网站 开发/哈尔滨网站制作软件

linux shell脚本的一些基础点1.输入和输出 0 1 20>&#xff1b;表示stdin标准输入1>&#xff1a;表示stdout标准输出2>&#xff1a;表示stderr错误输出看个例子&#xff1a;./start.sh >/dev/null 2>&11: start.sh 命令脚本2&#xff1a;/dev/null 代表空设…...

湖南地税局官网站水利建设基金/手机清理优化软件排名

1. 添加token和Cookie 其他业务都是依赖于登录成功而执行的。所以获取登录成功后的token和Cookie。结合Fidder或者wireshark进行抓包。 1.1 添加token方法 添加“HTTP token管理器”&#xff0c;添加正则表达式&#xff0c;并在需要token的地方进行引用即可。如下图&#xf…...