ECMAScript学习笔记(二)

本文详细介绍了ES6中变量的管理、简单和引用类型,包括Undefined、Null、Boolean、Number(精度与NaN)、String(不可变与扩展)和Symbol。此外,还涵盖了数组、Set/Map、Proxy、Reflect、Iterator、Generator、Promise、Class等核心数据结构与新特性。适合进一步理解JavaScript编程的高级概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

变量

简单数据类型变量

引用类型变量

变量的解构赋值

数据结构

Array

Set 和 Map

Proxy

Reflect

Iterator

Generator

Promise 与异步函数

Class

ES6及之后新特性

参考


​​​​​​​

变量

简单数据类型变量

1. Undefined 类型

Undefined 类型只有一个值 undefined。当使用 var 或 let 声明了变量但没有初始化时,相当于给变量赋予了 undefined 值。

2. Null 类型

Null 类型同样只有一个值,即特殊值 null。逻辑上讲,null 值表示一个空对象指针,这也是给 typeof 传一个 null 会返回"object"的原因。

3. Boolean 类型

不同类型与布尔值之间的转换规则:

数据类型

true

false

String

非空字符串

""

Number

非零数值(包括 Infinity)

0、NaN

Object

任意对象

null

Undefined

不存在

undefined

4. Number 类型

  • 浮点值

浮点值的精确度最高可达17位小数,但在算术计算中远不如整数精确。例如 0.1 + 0.2 得到的不是 0.3,而是 0.30000000000000004。由于这种微小的舍入错误,导致很难测试特定的浮点值。

let f1 = 1.1;

let f2 = .1; // 0.1 有效,但不推荐

let f3 = 1.; // 小数点后没有数字,当成整数1处理

let f4 = 10.0; // 小数点后是零,当成整数10处理

let f5 = 3.125e7; // 31250000 科学计数法
  • 值的范围

ECMAScript 可以表示的最小值保存在 Number.MIN_VALUE 中,这个值在多数浏览器中是 5e-324;可以表示的最大数值保存在 Number.MAX_VALUE 中,这个值在多数浏览器中是 1.7976931348623157e+308。超出最大值和最小值的数值会被自动转换为 Infinity。

isFinite()函数可以确定一个数值是不是有限的。

  • NaN

表示本来要返回数值的操作失败了。

  • 数值转换

①布尔值,true 转换为 1,false 转换为 0。

②null,返回 0。

③undefined,返回 NaN。

④字符串,应用以下规则:

如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。 因此,Number("1")返回 1,Number("123")返回 123,Number("011")返回 11(忽略前面 的零)。

如果字符串包含有效的浮点值格式如"1.1",则会转换为相应的浮点值(同样,忽略前面的零)。

如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值。

如果是空字符串(不包含字符),则返回 0。

如果字符串包含除上述情况之外的其他字符,则返回 NaN。

⑤对象,调用 valueOf()方法,并按照上述规则转换返回的值。如果转换结果是 NaN,则调用 toString()方法,再按照转换字符串的规则转换。

数值的扩展--ES6

数值的扩展 - ECMAScript 6入门

  • 二进制和八进制表示法
  • 数值分隔符
  • Number.isFinite(), Number.isNaN()
  • Number.parseInt(), Number.parseFloat()
  • Number.isInteger()
  • Number.EPSILON
  • 安全整数和 Number.isSafeInteger()
  • Math 对象的扩展
  • BigInt 数据类型

5. String 类型

  • 字符字面量

字面量

含义

\n

换行

\t

制表

\b

退格

\r

回车

\f

换页

\\

反斜杠(\)

\'

单引号(')

\"

双引号(")

\`

反引号(`)

\xnn

以十六进制编码 nn 表示的字符(其中 n 是十六进制数字 0~F),例如\x41 等于"A"

\unnnn

以十六进制编码 nnnn 表示的 Unicode 字符(其中 n 是十六进制数字 0~F),例如\u03a3 等于希腊字符"Σ"

  • 字符串不可变

字符串是不可变的(immutable),意思是一旦创建,它们的值就不能变了。要修改某个变量中的字符串值,必须先销毁原始的字符串,然后将包含新值的另一个字符串保存到该变量。

  • 转换为字符串

toString()方法可见于数值、布尔值、对象和字符串值。

在对数值调用toString()方法时,可以传入一个底数参数,即以什么底数来输出数值的字符串表示,默认为10。

let num = 10;

console.log(num.toString()); // "10"

console.log(num.toString(2)); // "1010"

console.log(num.toString(8)); // "12"

console.log(num.toString(10)); // "10"

console.log(num.toString(16)); // "a"


String(null) // "null"

String(undefined) // "undefined"

字符串的扩展--ES6

字符串的扩展 - ECMAScript 6入门

  • 字符的 Unicode 表示法
  • 字符串的遍历器接口
  • 直接输入 U+2028 和 U+2029
  • JSON.stringify() 的改造
  • 模板字符串
  • 实例:模板编译
  • 标签模板
  • 模板字符串的限制
  • 字符串的新增方法--ES6

字符串的新增方法 - ECMAScript 6入门

  • String.fromCodePoint()
  • String.raw()
  • 实例方法:codePointAt()
  • 实例方法:normalize()
  • 实例方法:includes(), startsWith(), endsWith()
  • 实例方法:repeat()
  • 实例方法:padStart(),padEnd()
  • 实例方法:trimStart(),trimEnd()
  • 实例方法:matchAll()
  • 实例方法:replaceAll()

6. Symbol 类型

Symbol 是 ECMAScript 6 新增的数据类型。Symbol 是原始值,且 Symbol 实例是唯一、不可变的。 Symbol 的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。

Symbol 需要使用 Symbol() 函数初始化。调用 Symbol() 函数时,也可以传入一个字符串参数作为对 Symbol 的描述(description),可以通过该值调试代码,与 Symbol 定义或标识无关。Symbol 无法通过字面量方式声明。

Symbol - ECMAScript 6入门

引用类型变量

1. Object

每个 Object 实例都有如下属性和方法

  • constructor:用于创建当前对象的函数。在前面的例子中,这个属性的值就是 Object() 函数。
  • hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性。要检查的属性名必须是字符串(如 o.hasOwnProperty("name"))或符号。
  • isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型。
  • propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用 for-in 语句枚举。与 hasOwnProperty()一样,属性名必须是字符串。
  • toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象对应的字符串、数值或布尔值表示。通常与 toString() 的返回值相同。

对象的扩展

对象的扩展 - ECMAScript 6入门

对象的新增方法

对象的新增方法 - ECMAScript 6入门

2. Date

  • 创建日期对象
    • let now = new Date();
    • Date.parse()
    • Date.UTC()
  • 继承的方法
    • toString()
    • toLocaleString()
    • valueOf() 返回数值,两个日期可比较大小
  • 日期格式化方法
    • toDateString()显示日期中的周几、月、日、年(格式特定于实现);
    • toTimeString()显示日期中的时、分、秒和时区(格式特定于实现);
    • toLocaleDateString()显示日期中的周几、月、日、年(格式特定于实现和地区);
    • toLocaleTimeString()显示日期中的时、分、秒(格式特定于实现和地区);
    • toUTCString()显示完整的 UTC 日期(格式特定于实现)。
  • 日期/时间组件方法
    • getTime()
    • setTime(milliseconds)
    • getFullYear()
    • getUTCFullYear()
    • setFullYear(year)
    • setUTCFullYear(year)
    • getMonth()
    • getUTCMonth()
    • setMonth(month)
    • setUTCMonth(month)
    • getDate()
    • getUTCDate()
    • setDate(date)
    • setUTCDate(date)
    • getDay()
    • getUTCDay()
    • getHours()
    • getUTCHours()
    • setHours(hours)
    • setUTCHours(hours)
    • getMinutes()
    • getUTCMinutes()
    • setMinutes(minutes)
    • setUTCMinutes(minutes)
    • getSeconds()
    • getUTCSeconds()
    • setSeconds(seconds)
    • setUTCSeconds(seconds)
    • getMilliseconds()
    • getUTCMilliseconds()
    • setMilliseconds(milliseconds)
    • setUTCMilliseconds(milliseconds)
    • getTimezoneOffset()

3. RegExp

  • 匹配模式
    • g:全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
    • i:不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。
    • m:多行模式,表示查找到一行文本末尾时会继续查找。
    • y:粘附模式,表示只查找从 lastIndex 开始及之后的字符串。
    • u:Unicode 模式,启用 Unicode 匹配。
    • s:dotAll 模式,表示元字符.匹配任何字符(包括\n 或 \r)。
  • 元字符
    • ( [ { \ ^ $ | ) ] } ? * + .
  • 实例属性
    • global:布尔值,表示是否设置了 g 标记。
    • ignoreCase:布尔值,表示是否设置了 i 标记。
    • unicode:布尔值,表示是否设置了 u 标记。
    • sticky:布尔值,表示是否设置了 y 标记。
    • lastIndex:整数,表示在源字符串中下一次搜索的开始位置,始终从 0 开始。
    • multiline:布尔值,表示是否设置了 m 标记。
    • dotAll:布尔值,表示是否设置了 s 标记。
    • source:正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有开头和结尾的斜杠。
    • flags:正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式形式返回(没有前后斜杠)。
  • 实例方法
    • exec()
    • test()

4. 原始包装类型

Boolean

Boolean 引用值与原始值的区别:

  • typeof 操作符对原始值返回 "boolean",但对引用值返回"object" 。
  • Boolean 对象是 Boolean 类型的实例,在使用 instaceof 操作符时返回 true,但对原始值则返回 false。
console.log(typeof falseObject); // object

console.log(typeof falseValue); // boolean

console.log(falseObject instanceof Boolean); // true

console.log(falseValue instanceof Boolean); // false

Number

继承方法:

  • valueOf()
  • toString()
  • toLocaleString()
  • toFixed()
  • toExponential()
  • toPrecision()
  • Number.isInteger()
  • Number.isSafeInteger()

String

属性和方法:

  • length
  • charAt()
  • charCodeAt()
  • String.fromCharCode()
  • trim()
  • repeat()

字符串操作方法:

  • concat()
  • slice()
  • substr()
  • substring()

字符串位置方法:

  • indexOf()
  • lastIndexOf()

字符串包含方法:

  • startsWith()
  • endsWith()
  • includes()

字符串复制:

  • padStart()
  • padEnd()

字符串的原型中暴露了一个迭代器,可以使用 for-of 访问每个字符。

字符串大小写转化:

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toLocaleUpperCase()

字符串模式匹配方法:

  • match()
  • search()
  • replace()

变量的解构赋值

变量的解构赋值 - ECMAScript 6入门

数据结构

Array

1. 创建数组

  • new Array()
  • Array.from()
  • Array.of()

2. 数组空位

使用字面量初始化数组时,可以使用一串逗号来创建空位,即

const options = [,,,,,];

console.log(options.length);

console.log(options);

ES6 新增方法会将数组空位当成存在的元素,只不过值为 undefined。

注:ES6 之前的方法会忽略数组的空位,但具体行为因方法而异。

数组的扩展 - ECMAScript 6入门

Set 和 Map

Set 和 Map 数据结构 - ECMAScript 6入门

Proxy

Proxy - ECMAScript 6入门

Reflect

Reflect - ECMAScript 6入门

Iterator

Iterator 和 for...of 循环 - ECMAScript 6入门

Generator

Generator 函数的语法 - ECMAScript 6入门

Generator 函数的异步应用 - ECMAScript 6入门

Promise 与异步函数

Promise 对象 - ECMAScript 6入门

async 函数 - ECMAScript 6入门

Class

Class 的基本语法 - ECMAScript 6入门

Class 的继承 - ECMAScript 6入门

ES6及之后新特性

ES6、ES7、ES8、ES9、ES10新特性一览

https://juejin.cn/post/6844903811622912014

ES11新特性介绍

https://juejin.cn/post/6844904180855881736

JavaScript ES12新特性抢先体验

https://juejin.cn/post/6890652568507121677

参考

JavaScript高级程序设计(第4版)

ECMAScript6入门--阮一峰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值