注意DOM和BOM的区别,ECMAScript只针对js的语法核心,实际大部分浏览器里的js = ECMAScript + DOM + BOM, 而nodejs里就只包括core js
隐性的toString、字符串转数字,有坑!
var a = [4];
console.log(a > 3); //true, 因为a.toString()是"4"
console.log(a > 5); //false
//原因在于:与数字比较时,js会隐性的将字符串转成数字。而单个元素的数组Array.toString()时,只输出单个元素的toString()。
var b = [4, 2];
console.log(b > 3); //false, 因为a.toString()是"4,2"
console.log(b > 5); //false
所有js放body的最后,先解析html显示页面,再加载js,提高页面响应速度
尽可能启用严格模式"use strict";
没有块级作用域,for循环里的i外部可见
for (var i = 0; i < 10; i++) {
console.log("in loop: " + i);
}
console.log("out loop: " + i);
gc: 标记清除 优于 引用计数(没有循环引用的问题)
Array.length是可写的,小技巧:可用来方便的删除、添加
var arr = [1, 2, 3];
console.log(Object.getOwnPropertyDescriptor(arr, 'length'));
arr.length = 2; // delete 3, [1, 2]
arr[arr.length] = 4; // add 4, [1, 2, 4]
- Array可以是Stack栈,可以是List队列,也可以是Dict(但不推荐作为Dict使用)
Array.push + pop = stack
Array.push + shift = list
- Array.sort是按toString()之后再排序的,即使全是数字,这里有坑!可能是因为能放不同的数据类型吧~
var arr = [1, 2, 3, 10, 15];
arr.sort(); // [1, 10, 15, 2, 3]
Array.splice特别有用,可以操作原数组:删除、插入、替换。slice只是切片,并且返回副本,一般不用。
Array.indexOf里比较用的是全等===,只对基本类型有效,查找对象和特定属性之类的用underscore
5.4 RegEx