目录
变量
简单数据类型变量
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
- 二进制和八进制表示法
- 数值分隔符
- 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
- 字符的 Unicode 表示法
- 字符串的遍历器接口
- 直接输入 U+2028 和 U+2029
- JSON.stringify() 的改造
- 模板字符串
- 实例:模板编译
- 标签模板
- 模板字符串的限制
-
字符串的新增方法--ES6
- 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 无法通过字面量方式声明。
引用类型变量
1. Object
每个 Object 实例都有如下属性和方法:
constructor
:用于创建当前对象的函数。在前面的例子中,这个属性的值就是 Object() 函数。
hasOwnProperty(propertyName)
:用于判断当前对象实例(不是原型)上是否存在给定的属性。要检查的属性名必须是字符串(如o.hasOwnProperty("name")
)或符号。
isPrototypeOf(object)
:用于判断当前对象是否为另一个对象的原型。propertyIsEnumerable(propertyName)
:用于判断给定的属性是否可以使用 for-in 语句枚举。与hasOwnProperty()
一样,属性名必须是字符串。toLocaleString()
:返回对象的字符串表示,该字符串反映对象所在的本地化执行环境。toString()
:返回对象的字符串表示。valueOf()
:返回对象对应的字符串、数值或布尔值表示。通常与toString()
的返回值相同。
对象的扩展
对象的新增方法
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()
变量的解构赋值
数据结构
Array
1. 创建数组
new Array()
Array.from()
Array.of()
2. 数组空位
使用字面量初始化数组时,可以使用一串逗号来创建空位,即
const options = [,,,,,];
console.log(options.length);
console.log(options);
ES6 新增方法会将数组空位当成存在的元素,只不过值为 undefined。
注:ES6 之前的方法会忽略数组的空位,但具体行为因方法而异。
Set 和 Map
Set 和 Map 数据结构 - ECMAScript 6入门
Proxy
Reflect
Iterator
Iterator 和 for...of 循环 - ECMAScript 6入门
Generator
Generator 函数的语法 - ECMAScript 6入门
Generator 函数的异步应用 - ECMAScript 6入门
Promise 与异步函数
Class
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版)