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