原帖由
css8 于 2009-9-18 22:58 发表
“另外还是有不少一眼可见的错误和术语误用”,请具体指出来?谢谢
习题时间到了。请指出以下叙述中都错在何处。上下文如有不明,请自行找样张搜索着看。
这个作用域链(Box.prototype.constructor.constructor.prototype)很长,长得几乎能够让
人背过气,它 是什么玩意?
从底层来看对象,对象就是一系列属性的集合,这与其他语言中的列表结构类似。
例如,a 引用 o,但是如果 o 的值发生了变化,则 a 就不指向 o 了
o = new Array(); // 覆盖对象o
各家浏览器的JavaScript 引擎也各不相同,分 歧最明显的就是 DOM实现部分。
IE,没有什么好说的了,一个狂妄的巨人。它最先提供支持 W3C DOM 标准和XMLHttpRequest 组件,但却是最后一个完全支持客户端JavaScript 语言标准的浏览器。
Safari 浏览器的渲染引擎为 KHTML,这个引擎对于JavaScript 的支持比较差,无法与Mozilla 的 Gecko引擎和微软的 Trident 引擎相抗衡。
据说,Opera 浏览器对标准的支持度最高,在特殊用户群中具有很高的威望,但是它的瑕疵也非常明显。
WebCore 和 WebKit 引擎都是 KHTML 引擎的衍生产品。
所以 JavaScript 解释器只需要通过静态分析就能确定每个变量、函数的作用域,这种作用域也称为静态作用域。
当然,也容易引发垃圾泛滥,甚至出现内存外溢的现象。
l 计算需要对象,于是就产生了数据。
l 计算需要效率,于是就产生了类型。
l 计算需要控制,于是就产生了变量。
而类型正是数据的单位,通俗地说就是计算机指令一次可以操作的数据块大小。
例如,双字节一次可以操作 32 位数据,单字节一次可以操作 16 位数据。如果没有各种数
据类型,则计算机只有一个单位(即字节),那么当需要操作一个 4 字节大小的数据块时,
就需要 4 次操作,而如果定义有双字节为单位的数据类型时,计算机只需要一次操作就可
以完成任务,所以说数据类型提高了计算机的执行效率。
类型是客观存在的,它存在于硬件支持层面,而不是人的主观想象。如果你去反汇编
程序的机器码,可以看到不同的数据类型,不同机器码的存在证明了类型是机器硬件级别
支持的,不是通过软件实现的,更不是一个抽象的概念。我们常说的 32 位操作系统、64
位操作系统,实际上它描述了系统执行的数据存在的基本类型。数据类型的单位有大有小,
小的单位可能只有 1 个字节(如布尔型数据),大的单位可能会非常大,这要看硬件是否支
持。一般整型数据大小为 16 位 2 个字节、浮点型数据大小为 32 位 4 个字节等。实际上,
对于布尔值来说,它只有 true 和 false 两个值,完全可以使用 1 位大小的数据类型来表示。
但是,由于 CPU 在操作数据时是以字节为单位的,如果一个布尔值占据 1 个位,那么剩余
的 7 个位就浪费了。
弱类型……当然这也是以牺牲开发速
度和效率为代价的,所以它成不了大气候
在 任何语言中,值的操作都可以归纳为以下 3 个方面。复制值 l 传递值 l 比较值
一般不建议大家使用八进制数值直接量。因为很多时候,JavaScript 会误解析为十进制数值。
但是对于数值直接量来说,不能够直接调用 toString()方法,必须使用小括号强制运算数值直接量后,再调用该方法
如果字符串包含在双引号中,则字符串内可以包含单引号。反之,就不行了,但是在 VBScript 中就可以在单引号中包含双引号
布尔型(Boolean)……所占据的空间也是最小的(仅有 1 个字节)
在对象中,当为属性设置值为 null 时,会提醒JavaScript 回收它们,无用也即无存在的价值,所以赋值 null 就等于判变量死刑(即删除变量)。
JavaScript 数组的结构比较固定,仅支持定义一维数组,虽然这简化了数组操作,但是
扩展性比较差,你 不能够使用JavaScript 定义多维数组。这 种固化的结构也显示了JavaScript
语言的柔弱性
下面代码定义了包含 5 个元素的空数组。var a = [,,,,];
如果属性值是函数,则该属性就成为对象的方法,读取这个特殊的属性值时,就必须附加小括号运算符
如果读者分析Google 网站的 JavaScript 程序,变量命名非常简洁,一般都为 1 或 2 个字母组成,这样做能够提高开发速度,便于书写
如果我们为变量a 赋值为 null,则 JavaScript 垃圾回收器就知道这个变量也没有
用,于是把这个变量视为垃圾一并进行回收(栈区),也就是说,如果一个变量、属性、元
素或对象被赋值为 null,也就意味着它们是无用的垃圾了