delete注意项

135 阅读1分钟

当一个属性被设置为不可设置,delete操作将不会有任何效果,并且会返回false。(引用类型)

var Employee = {};
Object.defineProperty(Employee, 'name', {configurable: false});
console.log(delete Employee.name);  // returns false

var, let以及const创建的不可设置的属性不能被delete操作删除。(基本类型)

var nameOther = 'XYZ';

// 通过以下方法获取全局属性:
Object.getOwnPropertyDescriptor(window, 'nameOther');

// 输出: Object {value: "XYZ",
//                  writable: true,
//                  enumerable: true,
//                  configurable: false}

// 因为“nameOther”使用var关键词添加,
// 它被设置为不可设置(non-configurable)
delete nameOther;   // return false

如果是数组对象,delete后元素为empty,但arr.length不变。

var arr=[1,2,3,4]
delete arr[2]
console.log(arr)  //[1,2,,4]
console.log(arr.length) //4