JavaScript权威指南5-delete关键字

    delete是一个一元操作符,它用来删除对象属性或者数组元素.就像赋值 递增 递减运算符一样.但是delete也有副作用,它是用来删除操作的,不是返回一个值.

对于对象来说,看例子

var o = {x:1,y:2};
console.log('x' in o);//true
console.log(o.x);//1
console.log(delete o.x);//true删除x属性
console.log('x' in o);//false,可以用in检测属性是否被删除
console.log(o.x);//undefined

对于数组来说

console.log(a.length);//4
console.log(a[2]);//3
console.log(delete(a[2]));//true
console.log(a.length);//4,并没有删除a[2],仅仅是把a[2]的值置为undefined
console.log(a[2]);//undefined,验证上面说法

对于不同的变量声明方式来说,会用var关键字声明和function创建全局对象属性不能被删除(不可配置属性)

var a = 10;
b = 20;
console.log(a);//10
console.log(b);//20
console.log(delete a);//false
console.log(delete b);//true
console.log(a)//10
console.log(b)//报错

function a(){
    console.log(666);
}
var b = function(){
    console.log(777);
}
c = function(){
    console.log(888);
}
a();//666
b();//777
c();//888
console.log(delete a);//false
console.log(delete b);//false
console.log(delete c);//true
a();//666
b();//777
c();//报错


对于原型编程来说,delete只是断开属性与宿主对象的联系,如下:

var person = {
    name:'',
    age:10,
    sex:'',
};
var xiaoming = Object.create(person);
xiaoming['name'] = '小明';
xiaoming.age = 19;
xiaoming.sex = '男';
xiaoming.clas = '计科1151';
console.log(xiaoming.clas);//计科1151
console.log(xiaoming.age);    //19
delete xiaoming.clas;//删除班级属性,属性不是从原型继承过来的,可以直接抹掉
delete xiaoming.age;//删除年龄属性,属性从原型继承过来的,只是断开了自己这一层的age,但原型的age = 10并未被抹去
console.log(xiaoming.clas);//undefined
console.log(xiaoming.age);    //10

你可能感兴趣的:(delete,javascript权威指南)