javascript中的奇怪删除操作符
1、删除对象的属性、代码:
复制代码代码如下所示:
var { { { {
甲:1,
B:2
};
删除o;
警报(o.a); / /未定义
那么删除是删除对象的属性还是对象的属性值呢我开始认为值应该被删除,因为结果是没有错误的未定义的,但是事实上,我的观点是错误的,例如:
复制代码代码如下所示:
var;
var = {
亲:zhenn
};
O = a;
删除O o;删除对象o属性
console.log(O.C); / /未定义
console.log(a.pro); / / zhenn
通过上面的代码,不难看出,删除O C后,C,O是指价值并没有被删除,即对象仍然存在,否则a.pro不能编译。说到这,我们可以了解到属性删除对象相当于参考在对象的属性值缺失,但该值仍在对象的堆栈。
2,数组的操作,先看看代码:
复制代码代码如下所示:
var arr = {1,2,3};
删除数组{ 2 };
console.log(arr.length); / / 3
console.log(ARR); / / {1,2,定义}
同样,已经证明了删除并没有真正删除元素,只是删除元素的键值。为了更好地理解删除的本质,请将它与数组中的POP方法进行比较:
复制代码代码如下所示:
var arr = {1,2,3};
Arr.pop();
console.log(ARR); / / {1,2}
console.log(arr.length) / 2
这应该是一笔很大的交易。
3,对象和数组的操作是很好理解的,但是对于变量的操作,不可避免地要让人们思考,代码如下所示:
复制代码代码如下所示:
var a = 1;
删除;
警报(a);1
函数FN(){返回42;}
删除FN;
警报((FN)); / 42
b=2;
删除B;
警报(b);未定义;
这是很难解释的啊,也是用var声明的全局变量不被删除,并直接声明变量B可以删除,删除不能说很奇怪,在ECMA的解释,只有通过var声明的变量和函数,通过与dontdelete特征函数的声明,不删除。