delete的使用规则

61 阅读1分钟

delete的使用规则

1.可以删除隐式全局变量,不可以删除显示全局变量。

2.内置对象的内置属性不能被删除,用户自定义的属性可以删除。

3.不能删除一个对象从原型继承来的属性,可以直接从原型上删掉它。

4.删除数组元素时,数组长度并不会减小。

5.delete的返回值为Boolean类型

下面我们一个一个看这些规则。

可以删除隐式全局变量,不可以删除显示全局变量

a = 3                         // 隐式
b = { name: 'zb' }            // 隐式
console.log(delete a);        // true
console.log(delete b);        // true
let c = 3                     // 显式
let d = { name: 'zb' }        // 显示
console.log(delete c);        // false
console.log(delete d);        // false

内置对象的内置属性不能被删除,用户自定义的属性可以删除

console.log(delete Math.PI);            // false,内置对象的内置属性
obj = {
    name: 'zb'
}
let obj1 = {
    name: 'zb'
}
console.log(delete obj.name);           // true,自定义对象的属性
console.log(delete obj1.name);          // true,自定义对象的属性
console.log(delete obj);                // true,obj是隐式声明
console.log(delete obj1);               // false,obj1是显式声明

不能删除一个对象从原型继承来的属性,可以直接从原型上删掉它

function Person(name, age){
    this.name = name
    this.age = age
}
Person.prototype.sex = '男'
let zb = new Person('zb', 18)
// 此时对象zb本身没有sex属性,但在原型链上有sex属性
console.log(delete zb.sex);          // 虽然返回true,但是没删掉
console.log(zb.sex);                 // '男'
console.log(delete Person.prototype.sex);       // true,在原型链上删除sex属性
console.log(zb.sex);                            // undefined

删除数组元素时,数组长度并不会减小

let Array = [1,2,3,4]
console.log(Array.length);     //4
console.log(delete Array[1]);  //true
console.log(Array);            //[ 1, <1 empty item>, 3, 4 ]
console.log(Array.length);     //4,依旧是4