文档: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);