JS数据类型
1.对象(object)
无序属性的集合,其属性可以包含基本值、对象、或者函数
2.原始类型
只能提供单一值,无法额外存储数据,所有的方法操作都是在对应的“对象包装器”创建临时对象的帮助下执行的。
Number
String
Boolean
“undefined”
“null”
Symbol
BigInt
着重看一下Symbol与BigInt这两个新的原始类型
Symbol
基本概念
Symbol 值表示唯一的标识符。
可以使用 Symbol()
来创建这种类型的值:
let name1 = Symbol("name");//"name"为描述,可选
即使相同描述,Symbol也不同。
let name1 = Symbol("name");//"name"为描述,可选
let name2 = Symbol("name");//"name"为描述,可选
console.log(name1===name2);//false
注意:Symbol并不支持字符串的隐式转换
我们无法:
alert(name1);
而是使用:
alert(name1.toString())
或是:
alert(name1.description)
所以在对象中使用Symbol时,我们应当:
let user = {
[name1] : "john",
age : 20
};
alert(user.age);
alert(user[name1]);
Symbol的用处:(核心:Symbol是唯一的)
1."隐藏"属性
如果我们想要向“属于”另一个脚本或者库的对象添加一个属性,我们可以创建一个 Symbol 并使用它作为属性的键。
Symbol 属性不会出现在 for..in
中,因此它不会意外地被与其他属性一起处理。并且,它不会被直接访问,因为另一个脚本没有我们的 symbol。因此,该属性将受到保护,防止被意外使用或重写。
2.JavaScript 使用了许多系统 Symbol,这些 Symbol 可以作为 Symbol.*
访问。我们可以使用它们来改变一些内置行为。
全局Symbol
通常所有的 Symbol 都是不同的,即使它们有相同的描述。但如果我们想创建两个不同地点的变量指向同一个Symbol呢
Symbol.for()
:在全局注册表中通过描述创建/查找Symbol
let name1 = Symbol.for("name");
let name2 = Symbol.for("name");
alert(name1===name2);//true
Symbol.keyFor()
:在全局注册表中通过全局Symbol查找其描述
let name1 = Symbol.for("name");
alert(Symbol.keyFor(name1));//name
注意:上面两个方法仅限全局Symbol
let name1 = Symbol("name");
alert(Symbol.keyFor(name1))//undefined
---------------------------------------
let name1 = Symbol.for("name");
alert(Symbol.keyFor(name1))//name
BigInt
在JS中,按照IEEE 754-2008标准的定义,所有数字都以双精度64位浮点格式表示。(-9007199254740991 (-(253-1))------9007199254740991(253-1))
使用BigInt,应用程序不再需要变通方法或库来安全地表示Number.MAX_SAFE_INTEGER
和Number.Min_SAFE_INTEGER
之外的整数。
1.基础使用
整数末尾追加n
console.log(123546489694555656161n);
BigInt()构造函数
BigInt("9007199254740995");
PS:
除一元加号运算符外,其余运算符均可正常使用但除法(/
)运算符的结果会自动向下舍入到最接近的整数。
(+)运算符,将操作数转化为Number类型
+"3.0"//3
10 + "15"//1015
10 + + "15"//25
2.与Number类型的混合
不能混合算术操作但可以进行关系运算,位操作符可以使用但必须左右统一类型。
不能把BigInt传递给需要Number类型参数的JS内置函数和Web API