首页 > 试题广场 >

请问以下JS代码的输出结果是什么? let a = 1; l

[单选题]
请问以下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);


  • 1、1、2
  • 1、undefined、2
  • 1、undefined、undefined
  • undefined、undefined、undefined
两件事情要弄明白:
一、delete是干什么的:
  • delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
二、delete使用要注意什么:
  • 如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true
  • 如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete操作只会在自身的属性上起作用)
  • 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。
    • 这样的话,delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)
    • 除了在全局作用域中的函数不能被删除,在对象(object)中的函数是能够用delete操作删除的。
  • 任何用letconst声明的属性不能够从它被声明的作用域中删除。
  • 不可设置的(Non-configurable)属性不能被移除。这意味着像MathArrayObject内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。
发表于 2022-03-06 14:45:35 回复(8)
因为es6中的let和const定义变量是不会挂载到window对象上的。所以如果let和const定义的变量不能delete.

所以上题中的a 还是 1
发表于 2021-12-23 17:05:18 回复(5)

delete a;用户通过var语句声明的变量不能删除,同时,通过function语句定义的函数和函数参数也不能删除。

delete 2;参数不是一个式值,delete将不进行任何操作同时返回true

编辑于 2021-12-10 17:38:46 回复(2)
delete类似与cpp里的,只对对象有用,相当于切断联系的指针
发表于 2023-05-01 14:59:04 回复(0)
delete只能删除对象属性
发表于 2022-04-06 01:23:12 回复(0)
  • 如果你试图删除的属性不存在,那么 delete 将不会起任何作用,但仍会返回 true
  • 如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete 操作只会在自身的属性上起作用)
  • 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。
    • 这样的话,delete 操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)
    • 除了在全局作用域中的函数不能被删除,在对象 (object) 中的函数是能够用 delete 操作删除的。
  • 任何用letconst声明的属性不能够从它被声明的作用域中删除。
  • 不可设置的 (Non-configurable) 属性不能被移除。这意味着像MathArrayObject内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。
发表于 2022-08-24 21:09:03 回复(0)
delete 对象中的属性,你再访问,就是undefined,如果是let,const声明的,你是删除不了的,最后打印2,你删不删2,不影响我打印,都会输出2
发表于 2022-08-22 16:02:37 回复(0)