delete操作符

版权声明:个人笔记,不喜勿喷 https://blog.csdn.net/qq_39571197/article/details/89551271

文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete ,更靠谱

# 不能删除

- 不会删除原型链上的属性;是不会,不是不能

class A{
	log(){}
}
const a = new A();

a.log; // func

a.hasOwnProperty('log'); // false
delete a.log; // 删除不存在的属性,也会返回true

delete A.prototype.log; // true

a.log; // undefined

- 声明,变量(var、let、const)、函数(function)

- 形参、arguments

function func(a,b){
delete a;
console.log(a); // 6

console.log(arguments); // arguments

delete arguments;
console.log(arguments); // arguments
}

func(6);

- func.length

function func(a,b){}

console.log(func.length); // 2

delete func.length;
console.log(func.length); // 0 不是删除,反而是清0了

- func.name

function func(a,b){}

console.log(func.name); // 'func'

delete func.name;
console.log(func.name); // '' 不是删除,反而是清空了

- 对象中的不可配置属性

// configurable:false
var Employee = {};
Object.defineProperty(Employee, 'name', {configurable: false});
console.log(delete Employee.name);  // returns false
// 密封对象,原理同上
const o1 = {
  a: 42
};

Object.seal(o1);
delete o1.a; // false
// 冻结对象,原理同上
const o1 = {
  a: 42
};

Object.freeze(o1);
delete o1.a; // false

 

# 不能删除的特性一旦生成了,一般是不能改变的,例如

function func(a,b){
a = 2;
delete a;
console.log(a); // 2
 

arguments = 2 
delete arguments;
console.log(arguments); // 2
}
 
func(6);

 

没有更多推荐了,返回首页