首页 新闻 会员 周边

请教ECMAScript中用delete运算符删除原始方法toString问题

0
悬赏园豆:20 [已解决问题] 解决于 2011-11-30 11:13

最近在看《JavaScript高级程序设计》一书,在第二章第9小节一元运算符中讲到:

delete运算符不能删除开发者未定义的属性和方法,例如,下面的代码将引发错误:
delete o.toString;
即使toString是有效的方法名,这行代码也会引发错误,因为toString()方法是原始的ECMAScript方法,不是开发者定义的。(《JavaScript高级程序设计》中文版p29)

但我测试的结果却不是这样的,我的测试代码如下:

 1 var o=new Object;
2 o.name="cnblogs";
3 o.show=function(){
4 return "cnblogs";
5 };
6 console.log(o);
7 delete o.name;
8 delete o.show;
9 console.log(o);
10 delete o.toString;
11 console.log(o);

结果如下:

大家可以看到左边的输出,没有出错。

这是书里讲的有问题呢,还是FireFox中的JS实现没有遵循ECMAScript标准呢,请高手指点。

artwl的主页 artwl | 专家六级 | 园豆:16736
提问于:2011-11-30 10:11
< >
分享
最佳答案
1

ECMAScript标准是:“delete运算符不能删除开发者未定义的属性和方法",而不是“delete运算符删除开发者未定义的属性和方法时要引发错误”。

在Firefox中(Chrome也一样),delete o.toString 没有产生作用{也就是没有删除toString,通过console.log(o.toString);可以看出来},也没有引发错误。

我觉得这样不仅遵循了ECMAScript标准,而且有更好的用户体验。

收获园豆:20
dudu | 高人七级 |园豆:30994 | 2011-11-30 10:36

嗯,应该是FireFox优化过,没有删除toString方法也没有报错。这种做法值得借鉴

artwl | 园豆:16736 (专家六级) | 2011-11-30 11:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册