今天说说JavaScript的数据类型,很多人会认为有六种数据类型,其实不是很全面,我们就盘盘JavaScript到底有几种数据类型,我们分原始类型和引用类型说。
1 typeof 操作符
在说数据类型之前,我们需要知道如何去判断一个变量属于什么数据类型,typeof操作符就是为此而生的。对一个值使用 typeof 操作符会返回下列字符串之一:
"undefined" 表示值未定义; "boolean" 表示值为布尔值; "string" 表示值为字符串; "number" 表示值为数值; "object" 表示值为对象; "function" 表示值为函数; "symbol" 表示值为符号; "bigint" 表示值最大安全整数;
复制
2 原始数据类型
在ES6之前,有五种原始数据类型,number、string、boolean、null、undefined,在ES6新增一种symbol,ES10新增一种bigint。算下来,原始数据类型就有7种。
2.1 number
let a = 1 let b = 1.1 let c = -1.1 typeof a // "number" typeof b // "number" typeof c // "number"
复制
我们通过操作符typeof可以看出上面几个变量都是原始数据类型中的数字类型,这里我们说下特殊的数值NaN,意思是“不是数值”(Not a Number),用于表示本来要返回数值的操作失败了(而不是抛出错误)。
console.log(0/0); // NaN console.log(-0/+0); // NaN
复制
我们还可以通过Number()、parseInt()和 parseFloat()将非数值转换为数值。
2.2 string
let firstName = "lilei"; let lastName = 'lixiaolei';
复制
这里就不多说了,单引号和双引号都是可以定义字符串的。
2.3 boolean
Boolean(布尔值)类型是 ECMAScript 中使用最频繁的类型之一,有两个字面值:true 和 false。
let a = false; let b = true;
复制
2.4 null
Null 类型只有一个值,即特殊值 null。逻辑上讲,null 值表示一个空对象指针,这也是给typeof 传一个 null 会返回"object"的原因:
let car = null; console.log(typeof car); // "object"
复制
2.5 undefined
Undefined 类型也只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值:
let message; console.log(message == undefined); // true
复制
2.6 symbol(ES6)
Symbol(符号)是 ECMAScript 6 新增的数据类型。用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
let sym = Symbol(); console.log(typeof sym); // symbol
复制
2.7 bigint(ES10)
BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt,整数溢出将不再是问题。
let max = Number.MAX_SAFE_INTEGER; // 最大安全整数 let max1 = max + 1 let max2 = max + 2 max1 === max2 //true
复制
由于JavaScript按照IEEE 754-2008标准的定义,所有数字都以双精度64位浮点格式表示。在此标准下,无法精确表示的非常大的整数将自动四舍五入。确切地说,JS 中的Number类型只能安全地表示-9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。使用BigInt,应用程序不再需要变通方法或库来安全地表示Number.MAX_SAFE_INTEGER和Number.Min_SAFE_INTEGER之外的整数。现在可以在标准JS中执行对大整数的算术运算,而不会有精度损失的风险。
let max = BigInt(Number.MAX_SAFE_INTEGER); let max1 = max + 1n let max2 = max + 2n max1 === max2 // false
复制
3 引用数据类型
引用数据类型(object类型),其实就是一组数据和功能的集合,通过 new 操作符后跟对象类型的名称来创建。我们常用的object、array、function、data等都属于引用类型。
let a = new Function() let b = new Date() let c = new Object() let d = new Array()
复制
关于引用类型的属性和方法,我们后期再讲。
4 总结
JavaScript的数据类型一共有8种,基本数据类型有7种,number、string、boolean、null、undefined,symbol(ES6),bigint(ES10),引用类型有1种object,我们常用的object、array、function、data等都属于引用类型。