js中 delete关键字用法

/**
 * 	规则
 *	1、可以删除隐式全局变量,但不可已删除显示全局变量。全局变量其实是global对象(window)的属性。
 *	2、内置对象的内置属性不能被删除,用户自定义的属性可以被删除。
 *	3、不能删除一个对象从原型继承而来的属性,但是可以直接从原型上删掉它;
 * 	4、当删除数组元素时,数组的长度并不会变小。
 */

// 1、可以删除隐式全局变量,但不可已删除显示全局变量。全局变量其实是global对象(window)的属性。
//隐式的全局变量
num1 = 10;

//显示式的全局变量
var num2 = 10;

console.log("删除前",num1,num2);//10 10

console.log("删除num1",delete num1);// true
console.log("删除num2",delete num2);// false

console.log("删除后",num1,num2); // num1 is not defined


// 2、内置对象的内置属性不能被删除,用户自定义的属性可以被删除。
obj = {

    h : 10
}

var obj1 = {
    h: 10
}

delete Math.PI; // false
delte obj.h; //true
delete obj; //ture ,obj 是全局变量的属性,而不是变量。

delete obj1.h;//true
delete obj1; //false 全局显示变量不能被删除


function fn(){

    var z = 10;

    delete z; //false
    //z是局部变量,不能被删除,delete只能删除对象的属性。
}

delete fn; //false
//fn 相当于是一个匿名变量,所以也不能被删除。



// 3、不能删除一个对象从原型继承而来的属性,但是可以直接从原型上删掉它;
function foo(){}
foo.prototype.name = 'zhangsan';

var f = new foo();

//delete只能删除自己的属性,不能删除继承来的属性
delete f.name; // false 

console.log(f.name);//zhangsan

delete foo.prototype.anme; // true

console.log(f.name); // undefined


// 4、当删除数组元素时,数组的长度并不会变小。
// 作用:在forEach 循环中删除元素,不会影响循环结果
var arr = [1,3,4,6,73,2];
delete arr[2];

console.log(arr.length); // 6
console.log(arr[2]); //undefiend
consoel.log(arr); //[ 1, 3, , 6, 73, 2 ]


posted on 2021-06-09 15:13  千里码!  阅读(18)  评论(0)    收藏  举报  来源