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)类型

类型描述
Array具体见数组章节。

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日
下一篇 2020年8月5日

相关推荐

  • 1.7JavaScript语言的函数(Function)

    1.Function()函数方式 Function() 函数方式创建的函数定义存在安全性和性能问题,所以不推荐使用,不过此种创建函数定义的方式很好地诠释了函数声明、函数表达式、箭头函数表达式是 Function 类型的实例这个概念。 2.函数声明 注意:在同一个作用域,相同名称的函数可以重复声明,但后定义的会覆盖先定义…

  • 1.1JavaScript语言的注释(Comment)

    1.行(Line)注释 行注释使同一行中紧跟 // 后的所有文本都成为注释。 2.块(Block)注释 块注释使 /* 和 */ 之间的无论是单行还是多行的所有文本都成为注释。 3.Hashbang注释 Hashbang 注释用于当 JavaScript 脚本文件直接在 shell 中运行时以指定 JavaScript…

  • 2.11JavaScript语言的异步函数

    1.异步函数声明 如果您想声明一个异步函数,只需要首先在普通函数前添加一个 async 关键字,然后在函数体内至少包含一个 await 关键字即可。普通函数支持函数声明、函数表达式、箭头函数、立即调用的函数表达式和实例方法。 2.await表达式 await 关键字后的表达式可以是 实现了 Thenable 接口的对象…

发表回复

登录后才能评论