提炼了一些

Awful Parts

Global Variables

三种方式会创建全局变量:

1
2
3
4
5
var foo = value; // 在任何函数外声明的变量
window.foo = value; // 直接写在window上的变量
boo = value // 没有声明就赋值的变量

Scope

明明没有block作用域却使用block的语法。

所以最好在函数的一开始来声明所有变量。

分号

javascript会尝试自动给程序加分号,但这会导致一些问题。

1
2
3
4
return //这回导致return后面自动加上分号,以至于返回undefined
{
status: true
};

保留字

保留字作为属性名时必须加引号

浮点数

浮点数计算

1
0.1 + 0.2 === 0.3 // false

将浮点数放大到整数来计算

NaN

1
2
3
4
5
6
7
typeof NaN === 'number' // 很奇怪吧
NaN === NaN // false
isNaN(NaN) // true
var isNumber = function isNumber(value) {
return typeof value === 'number' && isFinite(value);
}

可以转换成false的值

Value Type
0 Number
NaN Number
‘’ String
false Boolean
null Object
undefined Undefined

Function

function foo() {}

var foo = function foo() {};
是同一种表达

函数声明遵守变量提升标准。无论函数在哪声明的,他都会被放到scope中的顶端。