ES5
1. Undefined (未定义) / NaN (非数字)

2. null (空类型) - 定义空或者不存在的引用
null与undefined的区别:

3. 布尔值(true & false)
- true
- 非空字符串
- 非0数字
- 对象,new object()
- false
- "",空字符串
- 0,数字0
- null,空值
- undefined,未赋值变量

4. 字符串 string
两种字符串的定义方式:
- var str = "string";
- var str = String("string");
- var str = new String("string");

由此可见,第一种和第二种方式是一回事,都是在内存里划出一块来存value(入栈),然后assign operator左边的变量指向该块内存。
如例子中的str1指向的value和str0的value是相同的,JavaScript是找内存中是否已经存在该value,如存在,在str1就指向同一块内存,即str0 === str1返回true。
第三种方式是创建一个对象(入堆)。str4是创建新的对象,故而str3和str4分别指向不同的对象。
字符串的使用
- 用加号➕运算符把两个字符串连接起来。

- 访问字符串的长度:s.length

- 访问字符串没有字符:s.charAt

- 字符串的大小写转换:toLocaleLowerCase()、toLocaleUpperCase()、toLowerCase()、toUpperCase()
根据MDN的说法:
ECMAScript中涉及字符串大小写转换的方法有4个:toLowerCase()、toLocaleLowerCase()、toUpperCase()和toLocaleUpperCase()。其中,toLowerCase()和toUpperCase()是两个经典的方法,借鉴自java.lang.String中的同名方法。而toLocaleLowerCase()和toLocaleUpperCase()方法则是针对特定地区的实现。
对有些地区来说,针对地区的方法与其通用方法得到的结果相同,但少数语言(如土耳其语言)会为Unicode大小写转换应用特殊的规则,这时候就必须使用针对地区的方法来保证实现正确的转换。

5. 数值类型
JavaScript 类型系统——Number 数字类型 (讲得很好!)

6. 对象类型(详见对象篇)
包括Object、Function、String、Number、Boolean、Array、RegExp、Date、Global、Math、Error,以及宿主环境提供的Object类型。
