JavaScript 开发经验点滴

一、常用资料

二、有用技巧

1. 如何获得唯一标识符(UID)

利用toString(36),将一个数字转换为36进制,也就是10个数字+26个字母
uid = Number(Math.random().toString().split('.')[1]).toString(36);

2. localStorage采用[k,v]格式,仅支持字符串格式,怎么存储对象格式?

  • 存储:通过JSON.stringify()转换为序列号字符串;
  • 读取:通过JSON.parse()恢复为Object或任何其它数据类型

3. 一元运算符加法 & 一元运算符减法

一元加法本质上对数字无任何影响,但对字符串却有有趣的效果,会把字符串转换成数字。

1
2
3
4
5
6
7
8
var iNum = 20;
iNum = +iNum;
alert(iNum); //输出 "20"

var sNum = "20";
alert(typeof sNum); //输出 "string"
var iNum = +sNum;
alert(typeof iNum); //输出 "number"

类似的,一元减法就是对数值求负(例如,20 转换成 -20),或者将把字符串转换成近似的数字,并对该值求负(例如,字符串 “-20” 转换成 -20)。

注意:一元运算符默认仅支持十进制,仅对以 “0x” 开头的字符串(表示十六进制数字),一元运算符才能把它转换成十进制的值(例如 “0xB” 将被转换成 11)

请参考示例:

1
2
3
4
// 不同于标准的isNaN(), Number.isNaN()不会默认进行的类型转换
if(Number.isNaN(+this.config.timeout) || Number.isNaN(+this.config.retry)){
throw new Error(`PxerThread#init: ${this.id} config illegal`);
}

4. 关于实例方法和原型方法(Todo)

5. 关于apply、call和bind

三、经验之谈

  • javascript不支持同名方法的重载,因为它是一种弱类型的编程语言
  • 关于Class,如果在一个方法前加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
    ES6明确规定,Class内部只有静态方法,没有静态属性(指Class本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性)

四、参考文献