文章导航

JavaScript delete用法

2018-10-9 22:18| 作者: admin| 查看: 73| 评论: 0|来自: 蚂蚁部落

从运算符名称可以猜想到,它可以删除一些东西。

下面通过代码实例介绍一下此运算符能删除何种东西,有什么限制。

一.基本介绍:

此运算符通常用于删除对象的属性,也可以在满足一定条件下删除变量。

下面分别通过代码实例做一下介绍。

(1).运算符可以删除对象的属性:

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
let obj={
  webName:"蚂蚁部落",
  url:"http://www.softwhy.com",
  address:"青岛市南区"
}
delete obj.address;
console.log(obj.address);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221845l8kkhkahy9o9bosw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到address属性已经被删除。

(2).删除声明的变量:

并不是所有声明的变量都可以删除。

首先看一段代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
var webName="蚂蚁部落";
address="青岛市南区";
delete webName;
delete address;
console.log(webName);
console.log(address);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221914w3iegp9y9eloyz3k.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

有上述代码运行效果截图如下,可以得出如下结论:

(1).使用var声明的变量不能被删除。

(2).没有使用var声明的变量可以被删除。

再来看一段代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
eval("var webName='蚂蚁部落';"); 
delete antzone; 
console.log(antzone);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221945id5e6re6xnbne56b.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到,使用eval()解析一段JavaScript代码,尽管使用了var,但是依然可以删除。

在eval上下问环境中,不使用var声明也可以被删除,这里就再演示。

[JavaScript] 纯文本查看 复制代码运行代码
let arr=["蚂蚁部落",4,"青岛市南区"];
delete arr.length;
console.log(arr.length);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/222019ps3qoynsuy2osgs6.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

length是内置属性,无法被删除,通常内置属性是无法被删除的。

二.能否被删除的原理:

在很多文章经常会说,之所以一个对象属性不能够被删除,是因为此属性具有DontDelete特性。

现在纠正一下,DontDelete特性是ES3的概念,现在已经被ES5中的Configurable特性值为false所替代。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName:"蚂蚁部落",
  url: "http://www.softwhy.com",
  age:4
};
Object.defineProperty(antzone,"webName",{
    configurable:false
});
delete antzone.webName;
console.log(antzone.webName);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/222052m4jjs656712z6szl.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到,将webName属性的configurable特性值设置为false。

这样delete运算符就无法删除此类属性。

关于configurable可以参阅configurable、enumerable和writable介绍一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部