首页 > 其他分享 >任何用let或const声明的属性不能够从它被声明的作用域中删除。任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。

任何用let或const声明的属性不能够从它被声明的作用域中删除。任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。

时间:2023-11-14 18:35:04浏览次数:26  
标签:undefined 删除 作用域 delete 声明 属性

请问以下JS代码的输出结果是什么?

let a = 1;
let obj = {
  x: 1
}
delete a;
delete obj.x;
delete 2;
console.log(a);
console.log(obj.x);
console.log(2);

A
1、1、2

B
1、undefined、2

C
1、undefined、undefined

D
undefined、undefined、undefined

正确答案:B

需要明确的是delete方法只有在删除对象成员这种引用才有意义,或者说只能删除一种引用即对象成员,其余情况并没有太大的意义,基本都是返回一个布尔值true表示没有错误。

两件事情要弄明白:

一、delete是干什么的:

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

二、delete使用要注意什么:

如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true      
如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete操作只会在自身的属性上起作用)      


任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。    
这样的话,delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)          
除了在全局作用域中的函数不能被删除,在对象(object)中的函数是能够用delete操作删除的。         
  
任何用let或const声明的属性不能够从它被声明的作用域中删除。      
不可设置的(Non-configurable)属性不能被移除。这意味着像Math, Array, Object内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。     

引自:MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete

标签:undefined,删除,作用域,delete,声明,属性
From: https://www.cnblogs.com/longmo666/p/17832256.html

相关文章

  • k8s 删除Terminating状态的namespace
    查看ns状态root@test-10-5-2-15:~#kubectlgetnsNAMESTATUSAGEcert-managerTerminating19h查看该命名空间下的资源kubectlapi-resources-oname--verbs=list--namespaced|xargs-n1kubectlget--show-kind--ignore-not-found-n......
  • 视频直播点播平台EasyDSS无法删除分组,如何解决?
    EasyDSS视频推拉流平台可支持用户自行上传视频文件,也可将上传的点播文件作为虚拟直播进行播放。平台能支持多屏播放,可兼容Windows、Android、iOS、Mac等操作系统,还能支持CDN转推,具备较强的可拓展性与灵活性。有用户反馈,在EasyDSS上可以创建分组但删除分组时会提示无权操作,求助我们......
  • 二叉搜索树的插入 查找 删除
    //1、定义二叉搜索树类,封装查找、插入、删除操作删除最为麻烦,其中对于parent的保存用循环来记录while的条件需多加考虑#include<queue>#include<iostream>usingnamespacestd;classBinaryTreeNode{  private:  intvalue;  BinaryTreeNode*leftChild;......
  • Windows系统CMD命令行添加或删除路由
    Windows系统CMD命令行添加或删除路由 原文地址:https://www.cnblogs.com/dianchaozhang/p/16985395.html1,按Win键输入“CMD”,右键“以管理员身份运行” 2,在CMD窗口输入“ipconfig”并按Enter键  3,找到自己的网卡对应的“默认网关”,执行如下命令添加路由: routeadd{......
  • Java文件处理(一):创建文件、遍历文件夹、删除文件/文件夹
    本篇以代码为核心,在实践中自学吧年轻人~非常好迭代作业,爱来自BUAAFile对象要进行文件处理肯定需要File类啦。File的实例是一个实例(?),但是可以链接到本地的文件、文件夹,并对它们进行操作。从下面的一些示例中可以看到,同一份本地文件可以拥有多个File对象;同时,构造一个File对象......
  • 秦疆的Java课程笔记:26 基础 变量 常量 作用域
    变量就是可以变化的量。Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括:变量名,变量类型,作用域。注意事项:每个变量都有类型,类型可以是基本类型,也可以是引用类型。变量名必须是合法的标识符。变量声明是一条完整的语句,因此每一......
  • 删除arr数组中的第i个元素的最好做法是?
    删除arr数组中的第i个元素的最好做法是?①arr.splice(i-1,1)②arr.slice(0,n).concat(arr.slice(n+1,arr.length));③Array.prototype.remove=function(dx){if(isNaN(dx)||dx>this.length){returnfalse;}for(vari=0,......
  • 在eval中使用var声明的全局变量可以被delete删除; 未使用var声明的全局变量可以使用de
    执行完如下程序后,所有能被访问到的变量包括()vara=1;b=2;eval('varc=3');deletea;deleteb;deletec;Aa、b、cBa、cCaDc在eval中使用var声明的全局变量可以被delete删除,所以变量c能删除成功,除此之外,在其他情况下,使用var声明的全局变量或者局部变量一般是......
  • 为什么MySQL不建议使用delete删除数据?
    MySQL并不直接建议禁止使用DELETE语句删除数据,但是在某些情况下,使用DELETE可能会带来一些潜在的问题,特别是在大型数据库中。下面我将详细介绍为什么在某些情况下MySQL不建议过度使用DELETE语句来删除数据,并探讨其可能带来的影响。1.DELETE操作的影响DELETE语句用于从表中删除......
  • [C#] 无序数组快速删除
    原文链接:https://dotnet9.com/2023/11/csharp-array-deletion-secret-quick-deletion-techniques-reveal-secrets-make-your-code-more-efficient将需要删除的元素和数组的最后一个元素进行交换。删除数组的最后一个元素。时间复杂度O(1)......