1.4JavaScript语言的类型(Type)

JavaScript 语言有两种类型:原始类型(Primitive Type) 和 引用类型(Reference Type)。

原始类型包括:大整数类型(不可变的)、数值类型(不可变的)、布尔类型(不可变的)、字符串类型(不可变的)、符号类型(不可变的)、Undefined类型(不可变的)、Null类型(不可变的)。

引用类型包括:对象类型(可变的)、函数类型(可变的)、数组类型(可变的)、映射类型(可变的)、集合类型(可变的)、生成器类型(可变的)、期约类型(可变的)。

不可变的(immutable):又称为不可修改的,新值存储在新的内存地址,老值占用的内存随后被垃圾回收。

可变的(mutable):又称为可修改的,新值存储在老的内存地址。

1.大整数(BigInt)类型

可以在一个任意精度整数后跟一个小写字母 n 定义一个大整数。

注意:小写字母 n 只是为了将大整数与下述数值类型中的整数区分。

//二进制
0b11101001010101010101n
//八进制
0o777777777777n
//十进制
123456789123456789n
//十六进制
0x123456789ABCDEFn
类型范围包装的引用类型
BigInt任意精度整数BigInt

关于进制部分,与下述数值类型描述一样。

关于下划线部分,与下述数值类型描述一样。

2.数值(Number)类型

数值类型遵循IEEE 754二进制浮点算术标准

数值类型同时表示整数和浮点数。因为存储浮点数使用的内存空间是存储整数的两倍,所以在底层 JavaScript 会尽量转换成整数,在无法转换为整数的时候,则使用浮点数。

//整数
let a = 8;
//小数点后没有数字,则浮点数1.会被转换为整数1来处理。
let a = 1.;
//小数点后为数字0,则浮点数1.0会被转换为整数1来处理。
let a = 1.0;

//浮点数(小数点后至少有一个数字)
let b = 0.1;
//小数点前没有数字,则会被当成浮点数0.1来处理,但不推荐。
let b = .1;

数值类型中的整数和浮点数可以使用科学记数法(十进制)来表示:一个数值(整数或浮点数)后跟一个大写或小写的字母 e(表示乘以 10),再跟一个前面的乘以 10 的多少次幂。

类型范围包装的引用类型
Number整数(精确值):-9 007 199 254 740 992(-253) ≤ n ≤ 9 007 199 254 740 992(253)
浮点数(非精确值):±5e-324(±2-1074) ≤ n ≤ ±1.797 693 134 862 315 7e+308(±21024 - 2971)
Number

数值类型还包括五个特殊的值:

描述示例
Infinity(正无穷)、-Infinity(负无穷)任何无法表示的最大正数或最小负数。1/0 // Infinity
-1/0 // -Infinity
+0(正零)、-0(负零)任何无法表示的最小正数或最大负数。相等性详见“相等性运算符”章节。1/Infinity // 0
-1/Infinity // -0
NaN(Not a Number,非数值)在数学运算中,当遇到一些无法运算的情况时,其它一些编程语言会抛出错误,而 JavaScript 语言使用 NaN 表示这种情况,而不是抛出错误。相等性详见“相等性运算符”章节。0/0 // NaN
"张三"/2 // NaN
进制描述
二进制以 0b(零和小写字母b) 或 0B(零和大写字母B) 开头,后续只能包含数字 0 和 1。
八进制以 0(零) 或 0o(零和小写字母o) 或 0O(零和大写字母O) 开头,后续只能包含数字(0~7)。严格模式下,不支持以 0(零) 开头。
十进制单个数字 0(零)。或 以 1~9 开头,后续只能包含数字(0~9)。
十六进制以 0x(零和小写字母x) 或 0X(零和大写字母X) 开头,后续只能包含 数字(0~9) 和 字母(a~f 或 A~F)。字母(a~f 或 A~F) 表示数字 10 到 15。

为了提高数值的可读性,下划线(_,U+005F)可以用作分隔符,解析时会被 JavaScript 解释器移除。

//作为千分位分隔符
1_000_000_000
0.123_456_789
//作为字节分隔符
0x89_AB_CD_EF
//作为半字节分隔符
0b0001_1101_0111
//大整数类型
1_000_000_000_000_000_000_000n

3.布尔(Boolean)类型

类型包装的引用类型
Booleantrue 或 false(其它的大小写混写形式都是有效的标识符,但不是布尔值)Boolean

以下类型中的这些值被 Boolean() 函数转换以后都是 false,除此之外的任何其它值(包括 true)都是 true

类型这些值被 Boolean() 函数转换以后都是 false
BigInt0n
Number0+0-0NaN
Booleanfalse
String''""``(空字符串)
Undefinedundefined
Nullnull

4.字符串(String)类型

类型描述包装的引用类型
String具体见字符串章节。String

5.符号(Symbol)类型

类型描述包装的引用类型
Symbol具体见符号章节。Symbol

6.Undefined类型

类型描述包装的引用类型
Undefinedundefined表示变量已声明但未初始化。如果一个变量已声明但未初始化,则此变量会被自动赋予 undefined 值。——————

注意:无论是已声明未初始化还是未声明未初始化,typeof 运算符都会返回 "undefined"。因此我们可以在声明变量的时候进行初始化,这样,当 typeof 运算符返回 "undefined" 时,我们就会知道那是因为变量未声明未初始化,而不是已声明未初始化。

//变量b不存在
'use strict';
let a;

type a;  // "undefined"
type b;  // "undefined"

7.Null类型

类型描述包装的引用类型
Nullnull表示变量已声明且已初始化。如果一个变量将来需要保存对象,但此时又需要初始化时,可以使用 null 值来初始化该变量。——————

8.对象(Object)类型

Object 是所有类型的基类型。

类型描述
Object具体见类章节。

9.函数(Function)类型

类型描述
Function具体见函数章节。

10.数组(Array)类型

类型数组长度描述
Array0 ≤ length ≤ 4 294 967 295(232-1)具体见数组章节。

11.映射(Map)类型

类型描述
Map具体见映射章节。

12.集合(Set)类型

类型描述
Set具体见集合章节。

13.生成器(Generator)类型

类型描述
Generator具体见生成器章节。

14.期约(Promise)类型

类型描述
Promise具体见期约章节。

15.类型转换

类型转换函数描述
BigInt()转换为大整数类型(原始类型)。
Number()转换为数值类型(原始类型)。
Boolean()转换为布尔类型(原始类型)。
String()转换为字符串类型(原始类型)。
Object()转换为对象类型。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/4735.html

(1)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2020年8月3日 22:51
下一篇 2020年8月5日 02:22

相关推荐

发表回复

登录后才能评论