http://bitcoin-on-nodejs.ebookchain.org/5-%E9%99%84%E5%BD%95/2-Javascript%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.html
1.数组
当你需要拷贝数组时,使用 Array#slice
var len = items.length;
var itemsCopy = [];
itemsCopy = items.slice();
2.函数
永远不要把参数命名为 arguments。这将取代函数作用域内的 arguments 对象。
3.条件表达式。
条件表达式例如 if 语句通过抽象方法 ToBoolean 强制计算它们的表达式并且总是遵守下面的规则:
(无需显式转换)
对象 被计算为 true
Undefined 被计算为 false
Null 被计算为 false
布尔值 被计算为 布尔的值
数字 如果是 +0、-0 或 NaN 被计算为 false,否则为 true
字符串 如果是空字符串 ‘’ 被计算为 false,否则为 true
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false
4.运算符
位操作运算符总是返回 32 位的整数(source)。位操作处理大于 32 位的整数值时还会导致意料之外的行为。
使用 parseInt 转换数字时总是带上类型转换的基数。
var inputValue = ‘4’;
var val = Number(inputValue);
var val = parseInt(inputValue, 10);
布尔:
var age = 0;
var hasAge = Boolean(age);
var hasAge = !!age;
5.命名规则
使用下划线 _ 开头命名私有属性
使用 _this 保存 this 的引用。
6.存取器
属性的存取函数不是必须的。
如果你需要存取函数时使用 getVal() 和 setVal(‘hello’)。
如果属性是布尔值,使用 isVal() 或 hasVal()。
创建 get() 和 set() 函数是可以的,但要保持一致。
function Jedi(options) {
options || (options = {});
var lightsaber = options.lightsaber || ‘blue’;
this.set(‘lightsaber’, lightsaber);
}
Jedi.prototype.set = function set(key, val) {
this[key] = val;
};
Jedi.prototype.get = function get(key) {
return this[key];
};
7.构造函数
给对象原型分配方法,而不是使用一个新对象覆盖原型。覆盖原型将导致继承出现问题:重设原型将覆盖原有原型!
方法可以返回 this 来实现方法链式使用。
8.数据处理
parseInt()最好不用
浮点数范围:
as large as ±1.7976931348623157 × 10的308次方
as small as ±5 × 10的−324次方
精确整数范围:
The JavaScript number format allows you to exactly represent all integers between
−9007199254740992 and 9007199254740992 (即正负2的53次方)
数组索引还有位操作:
正负2的31次方