五种基本数据类型:Undefined, Null, Boolean, String, Number
一种复杂数据类型: Object (一组无序名值对)
Undefined:
未经声明和未初始化的变量,typeof 操作返回值都是undefined。
Null:
只有一个值的数据类型,这个特殊的值是null。
从逻辑角度来看,null表示一个空对象指针。 这也正是typeof检测null时会返回object的原因。
实际上,undefined值是派生自null值的。所以ecma规定对他们做相等性测试要返回true。
虽然二者有上述关系,但是他们的使用是完全不同的。
我们没有必要去显示声明一个变量为undefined,但是如果我们意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存null值。
Boolean:
Boolean类型的字面值只有两个true/false, 但ECMAScript中所有类型的值都有与这两个boolean值等价的值。要将一个值转化为其对应的Boolean值,调用转型函数Boolean()。
各种类型转换规则:
数据类型 | 准换为true的值 | 准换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | " "(空字符串) |
Number | 任何非0数字(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(not applicable) | undefined |
Number:
八进制:前导数为0
十六进制:前导数为0x
进行算数计算时,八进制和十六进制的所有数最终都会被转化为十进制。
浮点数:ECMAScript会不失时机的将浮点数转化为整数。
**不要测试某个特定的浮点数值。浮点数最高精度是17位小数,但在进行算数计算时其精确度远远不如整数。数值范围: Number.MIN_VALUE, Number.MAX_VALUE
若一个数超出范围则会返回-Infinity / Infinity
可使用isFinite()来检测一个数值是否有穷-
NaN:用来表示一个本来要返回数值的操作数未返回数值的情况。(这样就避免了抛出错误)
在ECMAScript中,任何数除以0会返回NaN,不会像其他语言那样直接抛出异常影响其他代码段的执行。
NaN的特点:任何涉及NaN的操作都会返回NaN; NaN与任何值都不相等,包括NaN本身。
image.png
所以,产生了isNaN()这个函数,帮我们确定这个数是否不是数值。
数值转换
Number(), parseInt(), parseFloat() (优先选后两者,具体见红宝书3.4.5)
String: 单双引号表示的字符串都有效。
- 字符字面量:转义序列。(6个字符长的转义序列表示一个字符,空格也表示一个字符)
- 特点:字符串不可变。不用的后台销毁。
- 转换为字符串:
要把一个值转换为字符串有两种方法:toString(), String()
toString(): 不需要参数,但可设置参数为基数以指定输出格式。null 和 undefined没有这个方法。
String(): 可将任何类型转换为字符串。原则:若值有toString()方法,则调用。没有则返回该返回的。
Object:一组数据和功能的集合。
var o = new Object();
一个重要思想:Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
valueOf(): 返回对象的字符串,数值和布尔值表示。通常与toString()方法的返回值相同。