📖 JavaScript 编程精解
JavaScript编程精解, Marijn Haverbeke, 机械工业出版社, 2012
本书讲的是 ECMAScript 3 版本.
JavaScript 基础: 值、变量、控制流程
- JavaScript 里有 6 种基本类型的值: number、string、Boolean、object 和 undefined.
- 标准的 JavaScript 数字描述是 64 位的浮点型值. (1 位存储正负, 11 位存储小数点位置, 52 位存储整数. 应将小数视为近似值而不是精确值.)
alert("Hello")
,confirm("Shall we, then?")
,prompt("Tell me", "...")
isNaN(2)
,typeof "x"
函数
- 其他函数内部定义的函数可以调用父函数的局部变量.
- 函数是唯一能创建新作用域的地方.
- JavaScript 中的所有东西都是值.
- JavaScript 不会限制传入函数的参数数目. 如果传入的参数过多, 多余的参数则被忽略掉; 如果传入的参数过少, 确实的参数则默认为 undefined.
数据结构: 对象与数组
- 删除属性
delete cat.size
- 属性名称如果不是一个合法的变量名称, 则不可以用点标记访问, 只能使用中括号的形式访问.
- 判断一个对象是否有某个属性
var chineseBox = {content:"China"};console.info("content" in chineseBox)
- 所有值类型都不能改变.
- 比较两个内容相同的不同对象将返回 false.
slice(start,end)
,slice(start)
截取字符串中的一部分.arguments
使用属性 0 对应第一个参数, 属性 1 对应第二个参数, 以此类推. 它不是一个真正的数组——它没有想 push 这样的方法; 当向该变量添加属性的时候, 它也不会自动更新 length 属性.- Math 对象: cos、sin、tan、acos、asin、atan、PI、E.
错误处理
- indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 (
stringObject.indexOf(searchvalue,fromindex)
)
函数式编程
function forEach(array, action){
for(var i = 0; i < array.length; i++){
action(array(i));
}
}
function map(func, array){
var result = [];
forEach(array, function(elment){
result.push(func(element));
});
return result;
}
正则表达式
- 正则表达式写在斜杠(/)之间.
- 中括号 “[” 和 “]” 表示一个字符列表, 只要其中一个字符被找到即可被匹配上.
"doubledare.search(/le/)"
,/a/.test("blah")
^
匹配字符的开头,$
匹配字符的结尾.\s
匹配任何空字符 (例如 Tab、换行和空格)..
任何不是换行符的字符.\d
任意数字.\b
匹配单词边界 (标点符号、空格、字符的开头或结尾)*
表示可以重复匹配任意次数(包括零次).+
至少匹配一次.?
该元素可选.i
末尾添加, 表示大小写不区分.|
表示允许模式在多个元素中选择一个.var holyCow = /\b(sacred|holy) (cow|bovine|bull)\b/i; holyCow.test("Sacred bovine!");
.()
括号内匹配部分将添加到数组.- 字符串有一个
match
方法, 接收正则表达式作为参数. 如果匹配失败就返回 null; 如果匹配成功则返回匹配的字符串组成的数组."... yes".match(/yes/i)
replace
替换方法"Borobudur".replace(/[ou]/g,"a")
.
Web 编程: 速成课
navigator.userAgent
,navigator.vendor
,navigator.platform
浏览器事件
- 在浏览器里, JavaScript 是单线程的.
-
注册事件处理句柄 (IE attachEvent, 其他浏览器 addEventListener)
function registerEventHandler(node, event, handler) { if (typeof node.addEventListener == "function") node.addEventListener(event, handler, false); else node.attachEvent("on" + event, handler); } registerEventHandler(button, "click", function(){print("Click (2)");});
- 删除事件句柄 (removeEventListener, detachEvent)
- 鼠标相关事件类型: mouseup, mousedown, mousemove, mouseover, mouseout
- 键盘事件: keydown, keyup, keypress
- 事件冒泡可以通过事件对象的 stopPropagation 方法停止, 默认行为通过 preventDefault 方法阻止 (IE 分别是 cancelBubble=true, returnValue=false 实现).