javascript确实是一个充满 江湖味道的语言;今天我就来讲一下在这个江湖中的一个小人物!
他可以清理这个江湖中的地痞流氓,有时候也可以和这个江湖中的老大window一较高下;他就是今天我们要讲的无敌小旋风 --delete;
{
name : 'delete',
age : 22,
skill : 'remove',
return : 'true || false'
}
skill:
(1) 删除对象中的属性
(2) 删除没有使用var关键字声明的全局变量
注意:
(1)返回值 布尔类型的值
(2)使用var关键字声明的变量无法被删除
(3)删除对象中不存在的属性没有任何变化,但是返回值为true
(4)不能删除window下面的全局变量(使用var声明),但是可以删除直接定义在window上面的变量属性
(5)不能删除从原型继承下来的属性
对于没有声明的变量,我们可以直接使用delete来进行清理,虽然此时window是这个变量的老大,因为这个变量是投诚过来的,window主人也不是特别的关照吧,over no care!!
然而对于直接使用var声明的全局变量,从诞生就尊奉window就是他们的守护神,delete想直接kill他,window会直接出手保护,任你delete拿出看家本领来,也是 No door!
但是,window对于自己的亲人,使用window直接声明的变量属性,delete只要拿出足够的证据,犯错误的,delete来kill他们,他无话可说,只不过在清除的时候,window也会清除自己亲属;
举个例子:
1字面量声明一个obj对象时候,我们可以直接通过delete来删除对象的属性;
2删除对象中不存在的属性没有任何变化,但是返回值为true
var obj = { name : 'Awen', age : 26 } console.log(obj.name); //Awen delete obj.name; console.log(delete obj.name); // true console.log(obj.name); //undefined
3使用var关键字声明的变量无法被删除
var a = 10; b = 20; //没有使用var关键字声明的变量默认会成为全局变量, //全局变量默认都会成为window的属性 console.log(b); //20 delete b; //console.log(b); //b is not defined console.log(a); //10 console.log(delete a); //false console.log(a) //10
4不能删除window下面的全局变量(使用var声明),但是可以删除直接定义在window上面的属性
window.a = 88; console.log(window.a); //88 delete window.a; console.log(window.a); //undefine
5不能删除原型继承下来的属性
function People(obj){ this.name = obj.name; this.age = obj.age; this.sex = obj.sex; this.hobby = obj.hobby; } //原型共享属性 People.prototype.leg = 2; People.prototype.eat = function(){ console.log(this.name + '在吃饭'); } People.prototype.run = function(){ console.log(this.name + '在北京霍营小区跑步'); } var p1 = new People({ name : 'Awen', age : 26, sex : '男', hobby : '撸代码' }); var p2 = new People({ name : 'ShaSha', age : 26, sex : '女', hobby : '撸IOS代码' }) b = 20; p1.eat(); //Awen在吃饭 p2.run(); //ShaSha在北京霍营小区跑步 var a = p1.leg; console.log(delete a); //false console.log(a) //2
浙公网安备 33010602011771号