学习笔记 – JavaScript的数据类型

这几天再看“JavaScript高级程序设计”,打算巩固下基础,顺便对一些常用的进行总结,之后的更新可能都是基础知识。有兴趣的可以关注下公众号

今天说说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等都属于引用类型。

正文完