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

相关推荐

  • 2.2JavaScript原始类型之字符串(String)

    1.单引号和双引号字符串字面量 JavaScript 语言的单引号和双引号字符串字面量语法上没有区别,所以以下一并讲解。 单引号和双引号字符串字面量支持所有转义序列。 单引号和双引号字符串字面量不支持字符串插值。 单引号和双引号字符串字面量支持在每行末尾添加一个转义字符反斜杠 \ 转义隐式的换行符从而跨多行编写一行代码…

  • 1.9JavaScript语言的条件(Conditional)、循环(Loop)、跳转(Jump)语句

    1.if条件 2.if-else条件 3.if-else-if条件 4.switch条件 switch 语句用于将 switchExpression 的值按从上往下的顺序与 caseExpression 的值逐个进行匹配测试,直到 switch 语句结束 或 遇到 break 语句。如果匹配成功,则…

  • 2.3JavaScript原始类型之符号(Symbol)

    一个符号实例用于表示一个唯一的标识符。 1.创建符号实例 注意:符号实例不支持字面量创建方式。 注意:符号实例不支持 new Symbol() 创建方式。 Symbol() 函数可选地接受一个字符串实参,字符串实参仅仅作为对符号实例的描述,将来可以通过这个字符串实参来调试代码,不影响任何事情。 Symbol() 函数的…

发表回复

登录后才能评论