ECMAScript
5种基本数据类型:
- Undefined
Undefined类型只有一个值,即特殊的undefined。
在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:
var t1,
t2 = undefined;
// 未声明t3变量
typeof t1 == 'undefined'; // true
typeof t2 == 'undefined'; // true
typeof t3 == 'undefined'; // true
t1 // "undefined"
t2 // "undefined"
t3 // ReferenceError: t3 is not defined
- Null
Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因,如下面的例子所示:
var t1 = null;
typeof t1 == 'object'; // true
null == undefined; // true
- Boolean
Boolean类型是ECMAScript中使用得最多的一种类型,该类型只有两个字面值:true和false。
这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。
var t1 = 'hello world!';
Boolean(t1); // true
Boolean()方法
数据类型 | 结果true | 结果false |
Boolean | true | false |
String | 非空字符串 | "" |
Number | 非零字符串(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a | undefined |
- Number
var n1 = 12, // 整数 12
n2 = 012, // 八进制 10
n3 = 019, // 无效的八进制 19
n4 = 0xa; // 十六进制 10
浮点数
不要用浮点数进行算术计算。
var n1 = 0.1, // 0.1
n2 = .1, // 0.1
n3 = 1., // 1
n4 = 1.0, // 1
n5 = 3.12e7; // 31200000
0.1 + 0.2 == 0.3; // false 0.30000000000000004
数值范围
判断是否在 Infinity 正无穷到 -Infinity 负无穷之间。
var n1 = Number.MAX_VALUE + Number.MAX_VALUE;
isFinite(n1); // false
Number.POSITIVE_INFINITY // Infinity
Number.NEGATIVE_INFINITY // -Infinity
NaN
任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。
NaN与任何值都不相等,包括NaN本身。
isNaN(NaN) // true
isNaN(10) // false 数值10
isNaN('10') // false 可转换为数值10
isNaN('blue') // true 不可转被换为数值
isNaN(true) // false 可转被换为数值
数值转换
/* Number()
* 可用于任何数据类型
* 转换字符串时,忽略前后空格,包含非数值字符或空格则为NaN
*/
Number(true) // 1
Number(false) // 0
Number(123) // 123
Number(null) // 0
Number(undefined) // NaN
Number(NaN) // NaN
Number('-123') // -123
Number('+123') // 123
Number('00123') // 123
Number('01.23') // 1.23
Number('0xa') // 10
Number('') // 0
Number(' 123') // 123
Number('123 ') // 123
Number('12 3') // NaN
Number('123b') // NaN
Number('b123') // NaN
Number('hello world!') // NaN
/* parseInt() */
parseInt('123b ') // 123
parseInt(' 123b') // 123
parseInt('b123') // NaN
parseInt('1 23b') // 1
parseInt('') // NaN
parseInt('0xa') // 10
parseInt('12.3') // 12
parseInt('070') // 70
parseInt('70') // 70
parseInt('10', 2) // 2
parseInt('10', 8) // 8
parseInt('10', 10) // 10
parseInt('10', 16) // 16
/* parseFloat()
* parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法。
* 如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零),会返回整数。
*/
parseFloat("1234blue") // 1234(整数)
parseFloat("0xA") // 0
parseFloat("22.5") //22.5
parseFloat("22.34.5") //22.34
parseFloat("0908.5") //908.5
parseFloat("3.125e7") //31250000
- String
转义字符
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号 |
\" | 双引号 |
\xnn | 十六进制代码,如 \x41 表示 "A" |
\unnnn | 十六进制代码,标识一个Unicode字符,如 \u03a3 表示希腊字符Σ |
字符串的特点
字符串的长度不可改变,当字符串发生变化,将销毁原来的字符串,重新生成新的字符串替换。
装换为字符串
var n1 = 10,
n2 = true,
n3 = null,
n4;
// toString(),Null和Undefined没有toString()方法。
n1.toString() // 10
n1.toString(2) // 1010
n1.toString(8) // 12
n1.toString(10) // 10
n1.toString(16) // a
// String()方法除Null和Undefined方法外,和toString()的默认方法一致。
String(n1) // 10
String(n2) // true
String(n3) // null
String(n4) // undefined
1种复杂数据类型:
- Object
Object的每个实例都具有下列属性和方法。
- Constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。
- isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型(第5章将讨论原型)。
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句(本章后面将会讨论)来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
检测数据类型:
var t1,
t2 = 'str',
t3 = true,
t4 = 123,
t5 = function(){},
t6 = null,
t7 = {name: 'cat'};
typeof t1 == 'undefined'; // true
typeof t2 == 'string'; // true
typeof t3 == 'boolean'; // true
typeof t4 == 'number'; // true
typeof t5 == 'function'; // true
typeof t6 == 'object'; // true
typeof t7 == 'object'; // true