解析javascript中不能删除操作符的对象

三,删除了8.6.2.5和11.4.1,如下





有一些信息。

1。上部删除运算符的实现调用引擎内的{ } }方法。

2、{ {删除} }定义8.6.2



三.删除的属性是一个dontdelete特征,如果有,删除直接返回FALSE。

搜索DontDelete,会有很多,以下不可删除

1、议论对象(10.1.6)激活的对象
复制代码代码如下所示:
函数(){
删除参数;
警报(参数);
}
函数(1);

2、变量声明(10.2.1)
复制代码代码如下所示:
var a=10;
删除;
警报(a);10

这篇文章已经在许多JS书中提到过,也就是说,删除使用var声明的变量是不可能的。

3、函数声明
复制代码代码如下所示:
函数(函数){ }
删除功能;
警报(函数);

4,函数的长度属性
复制代码代码如下所示:
函数(a,b){ }
删除func.length;
警报(函数长度);2

5,一些常量(南,无穷,未定义)
复制代码代码如下所示:
删除;
删除无穷大;
删除未定义的

6,构建在构造函数中的原型
复制代码代码如下所示:
删除object.prototype; / /假
删除function.prototype; / /假
删除array.prototype; / /假
删除expreg.prototype; / /假
删除Date.prototype; / /假
删除error.prototype; / /假
删除number.prototype; / /假
删除boolean.prototype; / /假
删除string.prototype; / /假

7,数组和字符串的长度。
复制代码代码如下所示:
var arr = { },str =你好;
删除arr.length; / /假
删除str.length; / /假

8、对数学对象的属性(数学。E,math.ln10,math.ln2,math.log2e,math.log10e,Math.PI,math.sqrt1_2 SQRT2,数学。)
复制代码代码如下所示:
删除数学


9、普通对象的属性(来源,全球IGNORECASE,多行,lastIndex)
复制代码代码如下所示:
var;
删除reg.source; / /假


ES5不同于沙,有没有dontdelete ES5,但{ { } }(8.6.1)可增加。



如果该值为false,它不能被删除,和9点以上描述为{ { } } ES5配置错误。

新的ES5 object.defineproperty方法可以显示所定义的对象的配置,如下
复制代码代码如下所示:
var obj = {姓名:约翰};
object.defineproperty(obj,
可配置:false,
值:静态
});
删除obj.name; / /真的
删除obj.key / /假

该对象的名称、关键。名字可以删除,关键是不。

此外,当删除配置是错误的对象在ES5的严格模式,扔directly.as是个例外
复制代码代码如下所示:
使用严格;
删除Object.prototype;

在FF中,控制台是错误的,如下所示



除了无法删除的内置对象的一些方法或属性之外,自定义对象不能被删除,例如删除不能删除继承自原型属性的对象。
复制代码代码如下所示:
函数(人){ }
person.prototype.name =约翰巴科斯;
新的人();
删除器;
console.log(器); / /约翰输出仍然是巴科斯

如果在这个和原型上都有名称,那么删除将在原型上呈现原型。
复制代码代码如下所示:
功能人(){
this.name =约翰巴科斯;
}
person.prototype.name =约翰特里;
新的人();
console.log(器); / / John Backus
删除器;
console.log(器); / / John Resig,从原型

如果您不想删除原型上的名称,只能
复制代码代码如下所示:
删除person.prototype.name

总结:

1,大多数的内置对象的属性和方法不能被删除(虽然有些可以删除,如isnan,parseInt)

2,对象从原型继承的属性和方法不能被删除。

原因也很简单。

1,大多数的内置对象的属性和方法不能删除保护最核心的API,这些API的语言,删除,如删除Object.prototype基本上抛弃了。

2,对象继承自原型的属性和方法。不能从原型中保护删除。否则,类似对象删除的属性是典型的,因此从A继承的属性将丢失此属性。