JavaScript 数据类型介绍
基本数据类型:String, Number, Boolean, Undefined, Null
引用类型: object
1. typeof 用来检测给定变量的数据类型,typeof 是一个操作符而不是函数。
- 'string':这个值是字符串
- 'number':这个值是数值
- 'boolean':这个值是布尔值
- 'undefined':这个值未定义
- 'function':这个值是函数
- 'object':这个值是对象或者 null(是一个空的对象引用)
console.log(typeof '123'); // "string"
console.log(typeof 123); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof function a(){}); // "function"
console.log(typeof null); // "object"
console.log(typeof {a:1}); // "object"
console.log(typeof new Date()); // "object"
console.log(typeof new RegExp()); // "object"
2. Undefined 类型
在使用 var 声明变量但未对其初始化时,这个变量返回 undefined。
包含 undefined 值的变量与尚未定义的变量还是不一样的。调用未声明的变量会报错。
对未初始化的变量执行 typeof 操作符 与 对未声明的变量执行 typeof 操作符都会返回undefined。
var a ; // 声明未初始化
// b 未声明
console.log(typeof a); // "undefined"
console.log(typeof b); // "undefined"
3. Null 类型
null 值表示一个空对象指针,这也正是使用 typeof 操作符检测 null 值时返回 "object"的原因。
如果定义的变量准备在将来用于保存对象,那么最好初始化为 null 而不是其他指。
undefined 值是派生自 null 值的,所以null 和 undefined 之间的相等操作符(==)总是返回true。
var car = null;
console.log(typeof car); // "object"
console.log(null == undefined); // true
console.log(null === undefined); // false
4. Boolean 类型
该类型只有两个字面值:true 和 false。
虽然 Boolean 类型的字面值只有两个,但是ECMAScript 中的所有类型的值都有这两个 Boolean 值等价的值。
下表给出了各种数据类型及其对应的转换规则:
数据类型 | 转为 true 的值 | 转为 false 的值 |
String | 任何非空字符串 | " "(空字符串) |
Boolean | true | false |
Number | 任何非零数字值(包括无穷大) | 0 和 NaN |
Object | 任何对象 | null |
Undefined | N/A | undefined |
5. Number 类型
整数可以用 八进制、十进制、十六进制的字面值来表示,默认为十进制。
八进制:第一位必须是零(0),然后是八进制数字序列(0~7),如果字面值中的数值超出了范围,那么忽略前导零,后面的数值将被当做十进制解析。
070 // 56
079 // 79
08 // 8
十六进制:前两位必须为 0x, 后面是任何十六进制数字(0~9 及 A~F),其中,字母可以大写也可以小写。
0xA // 10
0xa // 10
0x1f // 31
注:在进行算术计算时,所有以八进制和十六进制表示的数值最终都将转换成十进制数值。
- 浮点数值
0.1 // 0.1
.1 // 0.1
1. // 1
10.00 // 10
3.14e4 // 31400
0.1+0.2 // 0.30000000000000004
0.15+0.15 // 0.3
0.05+0.25 // 0.3
- 数值范围
Number.MIN_VALUE // 5e-324
Number.MAX_VALUE // 1.7976931348623157e+308
如果一个超出 JavaScript 数值范围的值,将自动转换成特殊的 Infinity 值,负数被转换为 -Infinity(负无穷),正数被转换为 Infinity(正无穷)。
可以使用 isFinite() 函数检测 参数是否位于最小和最大数值之间。
- NaN
NaN,即非数值(Not a number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
任何涉及 NaN 的操作都会返回 NaN。
NaN 与 任何值都不相等,包括 NaN 本身。
使用 isNaN() 函数来检测 这个参数是否“不是数值”。
isNaN(NaN) // true
isNaN(10) // false
isNaN("10") // false
isNaN("blue") // true
isNaN("true") // true
isNaN(true) // false
注:isNaN("10") 可以被转换成数值 10
6. String 类型
String 类型用于表示由零或者多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(")或者单引号(')表示。
任何字符串都有 length 属性。
toString() 方法 把一个值转换为一个字符串,数值、布尔值、对象和字符串值都有 toString() 方法,但 null 和 undefined 值没有这个方法(会报错)。
注:Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式和基模式。
基模式可以用不同的基输出数字,例如二进制的基是 2,八进制的基是 8,十六进制的基是 16。
var age = 11;
console.log(age.toString()); // 输出"11"
var found = true;
console.log(found.toString()); // 输出"true"
var num1 = 10;
console.log(num1.toString()); // 输出 "10"
var num2 = 10.0;
console.log(num2.toString()); // 输出 "10"
var myObject = {a:1};
console.log(myObject.toString()); // 输出 "[object Object]"
var iNum = 10;
console.log(iNum.toString()); // 输出 "10"
console.log(iNum.toString(2)); // 输出 "1010"
console.log(iNum.toString(8)); // 输出 "12"
console.log(iNum.toString(16)); // 输出 "A"
在不知道要转换的是不是 null 或者 undefined 情况下, 可以调用 String(),这个函数可以将任何类型的值转换为字符串。
- 如果值有 toString() 方法,调用该方法(没有参数)返回相应的结果。
- 如果值是 null ,则返回 "null"。
- 如果值是 undefined,则返回 "undefined"。
7. Object 类型
除过 Function 之外,通过 typeof 检测其数据类型返回的都是 object。
创建 object 的两种方式:
- new 操作符后跟 Object 构造函数
var o = new Object();
o.name = "aa";
o.age = 22;
- 使用对象字面量表达式
var o = {
name: "aa",
age: 22
}
注: Object 属性与方法稍后单独详细介绍。