Javascript Javascript 每日测试 - 第一期 2
2008-07-07 15:02:07
天气越发炎热,中午搞个小测试给大家提神还是不错的。这次是 玉伯 兄弟出的题目:
请确认下述语句 alert(String.indexOf); delete String.indexOf; alert(String.indexOf); alert(String.length); String.prototype = null; delete String.split; delete String.prototype; alert(String.prototype.split); alert(String.split); 每个 alert 都会输出什么?
粗看这道题目考的是 prototype 原型以及 delete 操作符的用法,于是很快就写出了答案
alert(String.indexOf); => function () {...}
...
alert(String.indexOf); => undefined
...
alert(String.prototype.split); => function () {...}
alert(String.split); => undeinfed有关 delete 操作符的描述,可以参见 Mozilla 的相关文档。
ECMAScript 为元素的属性定义了 4 种特性,它们分别是 ReadOnly、DontEnum、DontDelete、Internal ,这在平时用户级别的 Javascript 是无法更改的(来源)。(但 undefined 和 NaN 却是可读写的,这个是有点莫名其妙 -- form 小马)。
回到上面的问题,对于
alert(String.length);
输出 1 (不好意思作弊了)这个现象非常难以理解。小马 同学(再次感谢)做出了如下的解释,整理如下:
String 事实上是一个 function,是个所谓的构造器函数,可 用 typeof String 来验证。那么 function 的 length 属性, 它的值就是这个构造器函数在声明时的参数的数量。
详细可以参考这里。那么这样就很容易理解 alert(String.length) 为什么是 1 了 -- 因为它就提供了一个参数(来源)。
--EOF--
这里是《Javascript 每日测试 - 第一期》的 永久连接(Permalink),欢迎您 留言
或发送 Trackback。您也可以查看此篇文章的 Wap 版本(适用于移动设备)。
最后,如果您对本站的内容感兴趣,欢迎您 订阅本站。

