解析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继承的属性将丢失此属性。