Before chapter 4
1. Null:空对象指针
2. Undefined派生自null。相等性测试返回true。
3. true/false区分大小写。
4. 八进制字面量在严格模式下无效。
5. 永远不要测试某个特定的浮点数值。
6. Number.MIN_VALUE/Number.MAX_VALUE
7. Infinity/-Infinity 不能参与计算
8. isInfinite()
9. NaN:任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,包括NaN本身。
10. isNaN()适用于对象。先调用对象的valueOf(),然后调用toString()。
11. 把非数值转换为数值:Number()/parseInt(“string”)/parseFloat(‘string’)
12. parseInt(‘’)返回NaN;parseInt(22.5)返回22
13. ES5 JavaScript引擎中,parseInt()不具有解析八进制值的能力。
14. var num = parseInt(‘oxAF’, 16);
15. 建议无论在什么情况下都明确指明基数。
16. parseFloat()始终忽略前导的0,只解析十进制值,十六进制格式的字符串始终转换成0.
17. parseFloat(‘22.34.5’)返回22.34;parseFloat(‘3.123e7’)返回31230000。
18. 转义序列:\n 换行;\t 制表;\b 空格;\r 回车
19. ES中的字符串不可变。
20. toString()
21. null/undefined没有toString()方法。
22. String()。能够将任何类型的值转换成字符串。转换规则:toString()->值是null,返回’null’->值是undefined,返回’undefiened’。
23. ES中的对象是一组数据和功能的集合。
24. Object的每个实例具有以下属性和方法:Constructor/hasOwnProperty(‘propertyName’)/isPrototpeOf(object)/propertyIsEnumerable(‘propertyName’)/toLocaleString()/toString()/valueOf()
25. Object是所有对象的基础。
26. == 先转换再比较;=== 仅比较不转换
27. ES中的参数在内部是用一个数组来表示的。命名的参数只提供便利,不是必须的。
28. arguments对象可以与命名参数一起使用。arguments的值永远与对应命名参数的值保持同步。内存空间独立。修改命名参数不会改变arguments中对应的值。arguments对象的长度由传入的参数个数决定。
29. ES中所有参数传递的都是值,不可能通过引用传递参数。
30. ES函数没有签名,所以没有重载。通过检查传入函数中参数的类型和数量做出不同的反应。
31. 未指定返回值的函数返回的是一个特殊的undefined值。
32. XHTML中可以写:<script />,但HTML中不识别,只能写成<script></script>。
chapter 4 变量/作用域和内存问题
1. 基本类型/引用类型
2. 只能给引用类型值动态添加属性
3. 基本类型的复制:完全独立
4. 引用类型的复制:值的副本实际上是一个指针,指向存储在堆中的一个对象。两个变量引用同一个对象。
5. ES中所有函数的参数都是按值传递的。
6. typeof null返回object
7. result = variable instanceof constructor
8. 所有引用类型的值都是Object的实例。
9. 基本类型不是对象。
10. execution context/variable object
11. 每个函数都有自己的执行环境。
12. 环境栈
13. 每个环境都可以向上搜索作用域链。
14. 延长作用域链:try-catch语句的catch块;with语句。
15. js没有块级作用域。if/for
16. 使用var声明的变量会被自动添加到最接近的环境中。在with语句中,最接近的环境是函数环境。如果初始化变量时没有使用var声明,该变量会自动添加到全局环境window。
17. 标识无用变量的策略:标识清除(mark-and-sweep);引用计数(reference counting),循环引用。
18. 使用COM(Component Object Model)对象导致循环引用。
19. IE9把BOM和DOM对象转换成了真正的JS对象。
20. IE的垃圾收集器是根据内存分配量运行的。
21. 局部变量会在离开执行环境时,自动解除引用。
小结:
1. 基本类型在内存中占据固定大小的空间,保存在栈内存中。
2. 引用类型的值时对象。保存在堆内存中。
3. 包含引用类型值的变量包含的是一个指向该对象的指针。
4. 变量的执行环境有助于确定内存释放时间。