计算机程序是通过操作值来运行的,数据类型是值的一个属性,它能够描述在该值上允许执行的操作。在ECMAScript 2015规范中定义了如下七种数据类型:
- Undefined
- Null
- Boolean
- String
- Symbol
- Number
- Object
Undefined
Undefined类型只包含一个值,即undefined。在变量未被初始化时,它的值为unde-fined
。
Null
Null类型也只包含一个值,即null。我们通常使用null值来表示未初始化的对象。此外,null值也常被用在JSON文件中,表示一个值不存在。
Boolean
Boolean类型包含两个逻辑值,分别是true和false。
String
String类型表示文本字符串,它由0个或多个字符构成。
JavaScript
使用UTF-16编码来表示一个字符。UTF-16编码以两个字节作为一个编码单元,每个字符使用一个编码单元或者两个编码单元来表示。在底层存储中,字符串是由零个或多个16位无符号整数构成的有序序列。例如,字符串’ab’的存储结构如图所示。
在获取字符串长度时,返回的是字符串中包含的编码单元的数量。对于字符串’ab’而言,返回的长度是2。因为字符’a’和字符’b’均由一个编码单元表示,总和为2。前面介绍过,在UTF-16编码中,一个字符可能使用一个编码单元或者两个编码单元来表示。若字符串中包含需要使用两个编码单元表示的字符,那么获取字符串长度的结果可能不符合预期。例如下面的字符串:
此例中,我们在获取“心型“字符的长度为2, 因为”心型“字符需要使用两个编码单元来表示,即32个二进制。”心型“字符串的存储结构如下所示:
此外,ECMAScript 2015规定了字符串允许的最大长度为2^{53} – 1,该数值也是JavaScript所能安全表示的最大整数。
Number
Number
类型表示一个数字。JavaScript不详细区分整数类型、浮点数类型以及带符号的数字类型等。JavaScript使用双精度64位浮点数格式(IEEE 754)来表示数字,因此所有数字本质上都是浮点数。在该格式中,符号部分占用1位(bit),指数部分占用11位,小数部分占用52位,一共占用64位。具体结构如图所示:
Symbol
Symbol是ECMAScript 2015新引入的原始类型。Symbol值有一个重要特征,那就是每一个Symbol值都是唯一的且不可改变的。Symbol值的主要应用场景是作为对象的属性名。
Symbol的设计初衷是用来实现对象的私有属性,但实际上Symbol并不能实现真正意义上的私有属性。JavaScript还是提供了一些方法允许程序去访问Symbol属性。虽然Symbol无法实现绝对的私有属性,但是它确实有助于缓解属性命名冲突问题。
Symbol()
JavaScript提供了一个全局的"Symbol()"
函数来创建Symbol类型的值。我们可以将“Symbol()”
函数想象成GUID(全局唯一标识符)的生成器,每次调用“Symbol()”
函数都会生成一个完全不同的Symbol值。示例如下:
const sym = Symbol();
const obj = {[sym]: 'some value'};
console.log(obj[sym]); //some value
注: 将ts配置文件中 “target”: “es2015”
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": false,
"noImplicitAny": false,
"module": "commonjs",
"target": "es2015"
}
}
Well-Known Symbol
JavaScript内置了一些所谓的Well-Known Symbol
常量。这些Symbol常量用作对象属性名,它们的功能是定制对象的特定行为。在ECMAScript 2015规范中一共定义了11个Well-Known Symbol常量,如表所示。
Object
对象是属性的集合,每个对象属性都属于以下两种形式之一:
- 数据属性。可以为Undefined、Null、Boolean、String、Number、Symbol和Object类型的值。
-
存取器属性。由一个或两个存取器方法构成,用于获取和设置Undefined、Null、Boolean、String、Number、Symbol和Object类型的值。
对象属性使用键值来标识,键值只能为字符串或Symbol值。所有字符串(也包括空字符串)和Symbol值都是合法的键值。
酷客网相关文章:
评论前必须登录!
注册