JavaScript中有关对象属性的一些操作

创建对象

var obj={};
var obj=new Object();
var obj=Object.create(Object.prototype);        //Object.create() 为ES5新增
var obj=Object.create(Object.prototype,<属性描述符列表>);  
<属性描述符列表>格式:{
    prop1: <属性描述符1>,
    prop2: <属性描述符2>,
    ...
}
属性描述符可以是:{
    value:<value>,
    writable:[true|false],
    enumerable:[true|false],
    configurable:[true|false]
} 或 {
    get: function() {},
    set: function() {},
    enumerable:[true|false],
    configurable:[true|false]
}

删除属性

delete obj.property;
delete obj['property'];

检测属性

'property' in obj;      //检测属性是否存在
obj.hasOwnProperty('property');     //检测该属性是否为自有属性(非继承而来)
obj.propertyIsEnumerable('property');   //ES5新增,检测属性是否为自有属性,且可枚举
Object.getOwnPropertyDescriptor(obj, 'property')    //ES5新增,获取对象obj的属性property的属性描述符

设置属性

obj.property=value;
obj['property']=value;
obj={
    prop1: value1,
    prop2: value2,

    //getter和setter为ES5新增
    get prop3() {
        return somevalue;
    },
    set prop3(value) {
        //process and save value
    }
};

配置属性的特性,ES5新增

Object.defineProperty(obj,'property',<属性描述符>);
obj的属性会被定义,同时返回obj
例如:
Object.defineProperty(obj,'property',{value:'value', writable:true, enumerable:true, configurable:true});
Object.defineProperty(obj,'property',{get:function(){}, set:function(){}, enumerable:true, configurable:true});

批量配置属性特性

Object.defineProperties(obj,<属性描述符列表>);
//obj的属性会被设置,同时返回obj

枚举属性

for(property in obj) { console.log(property); }     //只能列出可枚举属性
Object.keys(obj);       //ES5新增,返回属性名数组,只能列出自有属性,只能列出可枚举属性
Object.getOwnPropertyNames(obj);    //ES5新增,返回属性名数组,只能列出自有属性,列出的属性包括不可枚举属性

修改对象可扩展性,ES5新增

Object.preventExtensions(obj);  //阻止对象扩展,不能添加新属性
Object.isExtensible(obj);       //检测对象是否可扩展

Object.seal(obj);   //封闭对象,除了不能扩展,还不能配置属性特性,但可写属性依然可以赋值
Object.isSealed(obj);   //检测对象是否封闭的

Object.freeze(obj); //冻结对象,除了封闭对象,所有属性都配置为只读
Object.isFrozen(obj);   //检测对象是否冻结的

《JavaScript权威指南》第6版中文版 勘误记录(边读边写,随时更新,只记录中文版引入的新bug)

第3章

3.1.5节“日期和时间”的示例代码最后一行为 later.getUTCHours(),遗漏英文原版下一页后5行代码。

3.2.2节“转义字符”表3-1主体内容第一行\o应为\0 (数字0)。

3.8.2节“显式类型转换”本人认为译注6是多余的。

3.10节“变量作用域”第二个代码示例
myscope = “local”; //这里显式地声明了一个新的全局变量
应为
myscope = “local”; //这里隐式地声明了一个新的全局变量

3.10节“变量作用域”第三个代码示例缩进格式丢失。

3.10节“变量作用域”第三个代码示例最后一行
checkscope() // => “嵌套的作用域
注释部分应保持英文不翻译,应为
checkscope() // => “nested scope

3.10.2节“作为属性的变量”第一段
是全局对象的正常的可配值属性
应为
是全局对象的正常的可配置属性

第4章

第4章引言
程序中的常量是最简单的一类表达式。
应为
程序中的直接量是最简单的一类表达式。

4.5节“调用表达式”
包括当形参表达式的个数和函数定义中的实参的个数不匹配……
应为
包括当实参表达式的个数和函数定义中的形参的个数不匹配……

4.5节“调用表达式”
作为属性访问主题的对象和数组
应为
作为属性访问主体的对象和数组

4.8.2节“一元算术运算符”“递减(–)”
当递减运算符在操作符的右侧时,运算符和操作数之间不能有换行符。
应为
当递减运算符在操作数的右侧时,运算符和操作数之间不能有换行符。

4.8.3节“位运算符”“按位异或(^)”
位运算符“|
应为
位运算符“^

4.9.1节“相等和不相等运算符”严格相等(===)比较规则第2条
如果两个值都是null或者都是undefined,则它们不相等
应为
如果两个值都是null或者都是undefined,则它们相等

4.9.2节“比较运算符”
String.localCompare()方法
应为
String.localeCompare()方法

第6章

6.2.2节“继承”第三段
如果之前o继承自属性x
应为
如果之前o继承了属性x
下同,所有“继承自”都应改为“继承了”。

6.4节“检测属性”末节示例代码
//如果x是undefined、null、false、” “、0或NaN,则它保持不变
字符串中应没有空格:
//如果x是undefined、null、false、””、0或NaN,则它保持不变

6.8.2节“类属性”
本人认为译注7是多余的而且造成误导,实际原文的说法是对的。

6.8.3节“可扩展性”
Object.esExtensible()
应为
Object.isExtensible()

6.8.3节“可扩展性”第四段
Object.seal() …不过它已有的可写属性依然可以设置
建议翻译为
不过它已有的可写属性依然可以赋值

第7章

7.9.5节“reduce()和reduceRight()”
到目前位置
应为
到目前为止

7.9.6节“indexOf和lastIndexOf”
对于splice()方法
应为
和splice()方法一样

第8章

8.2.3节
Max.max()
应为
Math.max()

第9章

9.2节“类和构造函数”
var r = range(1, 3);
应为
var r = new Range(1,3);

9.4节“类的扩充” 第二段示例代码中的正则表达式

/function\s*([^()*]\(/

应为

/function\s*([^(]*)\(/

9.7节“子类”
覆盖(override)和重载(overload)在面向对象编程中是两个不同的概念,9.7节将所有的override都错误地翻译成了“重载”,应为“覆盖”。

9.7.2节“构造函数和方法链”
但它需要完全重新实现一个add()方法
应为
但它不需要完全重新实现一个add()方法

9.9.2节“作为私有命名空间的函数”
译注16:
“它们”是指构造函数创建的新实例
译者没有理解代码本意,“它们”是指需要导出的公用API

第10章

10.1.1节“直接量字符”表10-1
*o**
应为
*
0**

10.1.2节“字符类”表10-2

\w  任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W  任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]

是字符而非单词,且遗漏原文中等价类的下划线,应为

\w  任何ASCII字符,等价于 [a-zA-Z0-9_]
\W  任何非ASCII字符,等价于 [^a-zA-Z0-9_]

10.1.3节”重复“例子
/\w{3}\d?/ // 精确匹配三个单词和一个可选的数字
建议翻译为
/\w{3}\d?/ // 精确匹配三个普通字符和一个可选的数字

10.1.5节“指定匹配位置”第四段

/Java(?! Script)([A-Z]\w*)/  

根据原文,断言中的文本并无开头的空格,应为

/Java(?!Script)([A-Z]\w*)/

10.1.5节“指定匹配位置”第四段
它可以匹配“JavaScript”,但不能匹配“JavaScripter”。
根据原文,应为
它可以匹配“JavaScrip”,但不能匹配“JavaScript”或“JavaScripter”。

10.3.2节“RegExp方法”最后一段
要么在每个字符串中找出所有的匹配以便将lastIndex自动重置为零,要么显式将lastIndex手动设置为0(当最后一次检索失败时需要手动设置lastIndex
这里翻译不但改动了原文语句的顺序,而且括号里的补充说明与原文意思刚好相反,应为:
要么在每个字符串中找出所有的匹配以便将lastIndex自动重置为零(发生在最后一次搜索失败时),要么显式将lastIndex手动设置为0

第13章

13.2.4节“HTML中的事件处理程序”最后一段
相互之间用逗号分隔
应为
相互之间用分号分隔

第14章

14.8.1节“打开和关闭窗口”
w.opener !== null; // true,对于由w创建的任意窗口
根据原文应为
w.opener !== null; // true,对于由open()创建的任意窗口w

第15章

15.3.1节“作为节点树的文档”
previoursSibling
应为
previousSibling

15.8.4节“滚动”
Window对象的ScrollTop()方法
应为
Window对象的ScrollTo()方法

15.10.4节“可编辑的内容”
function bold() { document.execCommand(“bold”, false, url); }
根据原文应为
function bold() { document.execCommand(“bold”, false, null); }

15.10.4节“可编辑的内容”
document.queryCommandSupport()
应为
document.queryCommandSupported()

第16章

16.2.2节“查询、插入与删除样式表规则”
selectText
应为
selectorText

第17章

17.1.2节“DOM事件”
3级DOM事件规范标准化了不冒泡的focusin和focusout事件来取代冒泡的focus和blur事件
应为
3级DOM事件规范标准化了冒泡的focusin和focusout事件来取代不冒泡的focus和blur事件

17.1.2节“DOM事件”
标准化了冒泡的mouseenter和mouseleave事件来取代不冒泡的mouseover和mouseout事件
应为
标准化了不冒泡的mouseenter和mouseleave事件来取代冒泡的mouseover和mouseout事件

17.2.3节“addEventListener()” 示例代码

<button id="my button">

应为

<button id="mybutton">

第18章

18.1.1节“指定请求”插文“顺序问题”
setRequestHeader()方法的调用必须在调用open()之前但在调用send()之后
应为
setRequestHeader()方法的调用必须在调用open()之后但在调用send()之前

第19章

19.5.3节“动画的取消、延迟和队列”
可以使用queque()方法给队列添加一个新的函数
应为
可以使用queue()方法给队列添加一个新的函数

19.6.1节插文“jQuery的Ajax状态码”
“timout”
应为
“timeout”

第20章

20章导言
本书第8章介绍过现在主流浏览器都支持一个文件对象
应为
本书第18章介绍过现在主流浏览器都支持一个文件对象

20.4.2节“缓存的更新” 例20-4代码progress事件处理程序
“process”事件
应为
“progress”事件(共2处)

第22章

22.4.1节“Worker对象”
Worker的postMessage()方法是没有参数的
应为
Worker的postMessage()方法是没有origin这个参数的

22.4.2节“Worker作用域“
同时,WorkerGlobalSpace会添加一个相同基本API的异步版本
应为
同时,WorkerGlobalSpace会添加一个相同基本API的同步版本

22.5节“类型化数组和ArrayBuffer”示例代码
last.bytelength
应为
last3.byteLength

DateView
应为
DataView(共2次)

JavaScript核心参考

String.trim() 缺少 EcmaScript 5 标注

客户端JavaScript参考

DataTransfer类, dropEffect属性
它的值必须为“none”、“copy”、“move”、“copy”、或link之一
应为
它的值必须为“none”、“copy”、“move”或link之一

Window.atob()及Window.btoa()
“base64″是技术术语,应保持原样不翻译。