ECAMScript 有 7 种数据类型,被分为两类:简单数据类型和复杂数据类型。
简单数据类型
简单数据类型是原始值,是按值传递的。
简单数据类型包括:
- Null ,空值
- Undefined ,未定义
- Boolean ,布尔值
- Number ,数值
- String ,字符串
- Symbol,符号
数据类型 Null
数据类型 Null 只有一个值:
- 空值
字面量:null
示例:
let empty = null
值 null 被表示一个空对象指针。
值 null 是一个假值,即在判断中会被判断为 false 。
数据类型 Undefined
数据类型 Undefined 只有一个值:
- 未定义值
字面量:undefined
示例:
let unknow = undefined
值 undefined 是由值 null 派生出来的,因此 ECMAScript 使值 undefined 与值 null 在表面上相等,但本质上是不相等的。
示例:
console.log(undefined == null) // true
console.log(undefined === null) // false
数据类型 Boolean
数据类型 Boolean 有两个值:
-
真值
字面量:true
-
假值
字面量:false
示例:
let bool_01 = false
let bool_02 = true
数据类型 Boolean 的值被称为布尔值。
布尔值不等于数值,即值 true 不等于 1 ,值 flase 不等于 0 。
数据类型 Number
数据类型 Number 有四种值:
-
整数(值)
字面量:十进制数值(0~9)示例:
let intNum = 20919
-
浮点值
字面量:-
小数
示例:let floatNum = 20.79
-
科学计数法
示例:let sciNum = 19.48e-12
-
-
无穷值
字面量:Infinity
正无穷:
Infinity
负无穷:-Infinity
示例:
let positiveInfinity = Infinity let negativeInfinity = -Infinity
-
非数值
字面量:NaN
意思是 Not a Number ,用于表示本来要返回数值的操作失败了。
示例:
console.log(0/0) // NaN console.log(2/0) // Infinity
NaN
有几个独特的性质:- 任何涉及
NaN
的操作得到的值始终是NaN
。 NaN
不等于包括NaN
自身的任何值。
示例:
console.log(NaN * 10) // NaN console.log(NaN === NaN) // false
- 任何涉及
值的范围:
- 最小值:
Number.MIN_VALUE
- 最大值:
Number.MAX_VALUE
- 正无穷:
Number.POSITIVE_INFINITY
- 负无穷:
Number.NEGATIVE_INFINITY
特殊的值:
- 正零:
+0
- 负零:
-0
数据类型 String
数据类型 String 只有一种值:
- 字符串(值)
字面量:使用双引号""
、单引号''
、反引号` `
包裹的字符。
示例:
let str_01 = "string01"
let str_02 = 'string02'
let str_03 = `string03`
数据类型 Symbol
数据类型 Symbol 只有一种值:
-
符号(值)
没有字面量语法。需要通过函数 Symbol() 来创建一个符号值。
示例:
let symbol = Symbol()
复杂数据类型
复杂数据类型是引用值,是按引用传递的。
复杂数据类型包括:
- Object ,对象。
数据类型 Object
数据类型 Object 只有一种值:
-
对象(值)
字面量:使用花括号
{}
包裹对象的属性名与属性值的组合。属性名与属性值之间使用冒号操作符
:
进行关联;组合之间使用逗号操作符
,
分隔。对象的属性名有以下几种形式:
-
使用字符串作为属性名。
当字符串是连续的字母、数字、下划线_
的任意组合时,可以使用简写形式表示属性名。示例:
const obj = { 'bool': true, 'num': 1, 'str': 'string', 'str-hi': 'hi', 'str space': 'space' } // 简写形式 // 当字符串是由连续的字母、数字、下划线(_)组成时,才能使用简写 // 其它情况都不能使用简写形式 const obj_abbr = { bool: true, num: 1, str: 'string', str_01: 'string_01' }
-
使用符号作为属性名。
需要对符号使用方括号操作符[]
。示例:
const symbol = Symbol() const obj = { [symbol]: 'symbol attribute' }
-
使用表达式作为属性名,被称为 可计算属性 。
需要对表达式使用方括号操作符[]
。示例:
const num = 2049 const obj = { ['attribute' + num]: 'attribute 1' }
-
访问属性
访问对象的属性有两种形式:
-
使用点操作符
.
。
使用点操作符只能访问可以使用简写形式表示的属性。示例:
const obj = { num: 2076 } console.log(obj.num) // 使用点操作符(.)访问对象属性 // 输出: // 2076
-
使用方括号操作符
[]
。
使用方括号操作符可以访问使用字符串和符号形式表示的属性。示例:
const symbol = Symbol() const obj = { num: 2045, [symbol]: 'symbol' } // 使用方括号操作符([])访问对象属性 console.log(obj['num']) console.log(obj[symbol]) // 输出: // 2045 // symbol
添加属性
添加属性的语法与访问属性语法完全相同:
-
使用点操作符
.
。
使用点操作符只能添加可以使用简写形式表示的属性。示例:
const obj = {} obj.attr = '2049' // 使用点操作符(.)添加对象属性 console.log('obj:', obj) // 输出: // obj: {attr: '2049'}
-
使用方括号操作符
[]
。
使用方括号操作符可以添加使用字符串和符号形式表示的属性。示例:
const symbol = Symbol() const obj = {} // 使用方括号操作符([])添加对象属性 obj['attr'] = '2076' obj[symbol] = 'symbol' console.log('obj:', obj) // 输出: // obj: {attr: '2076', Symbol(): 'symbol'}
删除属性
使用操作符 delete 删除属性。
示例:
const obj = {
attr_01: '2091',
attr_02: '2108'
}
delete obj.attr_02 // 使用操作符 delete 删除属性
console.log('obj:', obj)
// 输出:
// obj: {attr_01: '2091'}