JavaScript客户端document对象不常用属性

document.readyState

文档载入状态,按顺序分别为

  • loading,正在解析文档
  • interactive,文档解析完成,但文档的其它资源(如图片)尚未完全载入,此时document也会触发DOMContentLoaded事件
  • complete,文档资源完全载入完毕,此时也会触发window的load事件

document.compatMode

页面渲染模式,有标准模式和怪异模式,未声明doctype的文档将被以怪异模式渲染,以保持向后兼容,取值有

  • CSS1Compat,正在使用标准模式
  • BackCompat或该属性未定义,表示正在使用怪异模式。

document.domain

指定文档的同源策略,以便不同子域的脚本可以访问其他子域的资源。

document.URL

文档的初始URL,不同于location.href,为只读属性。

document.lastModified

文档的最后修改时间。

document.referrer

文档的来源URL,从哪个地址跳转到当前文档。

document.title

文档的标题。

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″是技术术语,应保持原样不翻译。

Win7及以下虚拟机初始化配置一般流程

禁用系统还原、禁用屏幕保护程序、禁止关闭屏幕、禁止自动休眠

禁用Windows Defender、禁用自动播放

禁用整理磁盘碎片的计划任务

禁止自动更新

调整按键重复频率(可选)

禁用休眠转储文件,以管理员身份运行:powercfg -h off

安装性能增强驱动

关闭不必要的服务:

Windows Update
Windows Defender
Security Center
Print Spooler
Volume Shadow Copy

文件夹选项,显示隐藏文件、系统文件,不隐藏已知文件扩展名,不缓存缩略图。(可选)

如果是IE6,先访问一次网址,因为第一次打开网址总会关闭窗口并弹出连接向导。
否则,设置始终在新选项卡打开,然后打开两个选项卡,关闭浏览器,为的是勾选关闭多个标签页不要再提醒。

如果IE版本>=10,在关于窗口取消勾选“自动安装新版本”。(可选)

清空Temp目录,清除IE缓存和历史记录。

移除虚拟机的光盘镜像。

我的Sublime Text 3配置

{
    "default_encoding": "UTF-8",
    "default_line_ending": "unix",
    "font_size": 10,
    "highlight_line": true,
    "hot_exit": false,
    "line_padding_bottom": 0.5,
    "line_padding_top": 0.5,
    "remember_open_files": false,
    "tab_size": 4,
    "draw_white_space": "selection",        //all
    "translate_tabs_to_spaces": false,
    "update_check": false,
    "word_wrap": false,
    "update_check": false,
}

解决Debian PXE方式安装找不到硬盘的问题

该问题是由于网络启动模式的initrd.gz中并未包含对应的驱动模块,导致无法发现硬盘。可以拿DVD光盘中install[.arch]目录下的initrd解压后获取驱动模块,与网络方式(netboot)安装的initrd合并后,重新制作新的initrd文件。

1. gunzip解压dvd中的initrd.gz并重命名为initrd-dvd

2. gunzip解压netboot中的initrd.gz并重命名为initrd-net

3. 解包initrd-dvd到dvd目录

mkdir /tmp/dvd
cd /tmp/dvd
cpio -i < initrd-dvd

4. 解包initrd-net到net目录

mkdir /tmp/net
cd /tmp/net
cpio -i < initrd-net

5. 将dvd版本中的驱动复制到net版(请调整目录名称)

cd /tmp
cp -a dvd/lib/modules/3.2.0-4-amd64/kernel/drivers/* net/lib/modules/3.2.0-4-amd64/kernel/drivers/

6. 重新打包initrd

cd /tmp/net
find | cpio -o -R 0:0 -H newc | gzip > ../initrd.gz

7. 复制initrd.gz到tftp目录测试PXE引导,Enjoy!

本文参考了以下资料:
http://unix.stackexchange.com/questions/68387/preseeding-debian-install-from-local-mirror-no-disks-detected