03 2022 档案
摘要:抽象与具体的集合类层次(Sets.js) /* AbstractSet 是具有 has 方法的集合 */ class AbstractSet { has(x) { throw new Error(`Abstract method`); } } /* 集合中不属于给定集合的所有元素的集合 */ cla
阅读全文
摘要:多次调用函数f,传给它迭代数值,如要打印3次“hello”: Number.prototype.times = function (f, context) { let n = this.valueOf(); for (let i = 0; i < n; i++) f.call(context, i)
阅读全文
摘要:报错代码: //定义请求拦截器 service.interceptors.request.use( (config) => { if (window.localStorage.Token && window.localStorage.Token.length >= 128) { config.hea
阅读全文
摘要:使用访问器属性的其他场景还有后写入属性时进行合理性检查,以及每次读取属性时返回不同的值: // 这个对象保证序号严格递增 const serialnum = { // 这个数据属性保存下一个序号 // 属性名中的_提示它仅在内部使用 _n: 0, // 返回当前值并递增 get next() { r
阅读全文
摘要:这个对象用普通数据属性保存点的x和y坐标,用访问器属性给出与这个点等价的极坐标: let p = { // x和y是常规的可读写数据属性 x: 1.0, y: 1.0, // r是由获取方法和设置方法定义的可读写访问器属性 // 不要忘了访问器方法后面的逗号。 get r() { return Ma
阅读全文
摘要:访问器属性可以通过对象字面量的一个扩展语法来定义(与我们前面看到的其他ES6扩展不同,获取方法和设置方法是在ES5中引入的): let o = { // 一个普通的数据属性 dataProp: value, // 通过一堆函数定义的一个访问器属性 get accessorProp() { retur
阅读全文
摘要:到目前为止,本章讨论的所有对象属性都是数据属性,即有一个名字和普通的值。除了数据属性之外,JavaScript还支持为对象定义访问器属性(accessor property),这种属性不是一个值,而是一个或两个访问器方法:一个获取方法(getter)和一个设置方法(setter)。 当程序查询一个访
阅读全文
摘要:ES2018新增了一种新迭代器,称为异步迭代器,同时新增了一种for/for循环,即使用异步迭代器的for/await循环。 // 从异步可迭代流中读取数据块并将其打印出来 async function printStream(stream) { for await (let chunk of st
阅读全文
摘要:ES6内置的Set(集合)和Map(映射)类是可迭代的。在使用for/of迭代时,循环体对集合中的每个元素都会运行一次。可以使用类似下面的代码打印出一个文本字符串中的唯一单词: let text = "Na na na na na na na na Batman!"; let wordSet = n
阅读全文
摘要:字符串在ES6中是可以逐个字符迭代的: let frequency = {}; for(let letter of "mississippi") { if (frequency[letter]) { frequency[letter]++; } else { frequency[letter] =
阅读全文
摘要:对象(默认)是不可迭代的。运行时尝试对常规对象使用for/of会抛出TypeError: let o = { x: 1, y: 2,z: 3}; for(let element of o) { console.log(element); } 如果想迭代对象的属性,可以使用for/in循环,或者基于O
阅读全文
摘要:if语句有两种形式,第一种是: if (expression) statement if (nsername == null) // 如果username是null或undefined username = "John Doe"; // 定义这个变量 // 如果username是null、undef
阅读全文
摘要:语句块将多个语句组合为一个复合语句。语句块其实就是一系列语句,可以放在任意期待一个语句的地方: 查看代码 { x = Math.PI; cx = Math.cos(x); console.log("cos(n) = " + cx); } JavaScript解释器在执行空语句时什么也不会做: 查看代
阅读全文
摘要:有副效应的表达式,赋值语句。例如: 查看代码 greeting = "Hello " + name; i *= 3; 递增操作符++和递减操作符--就好像执行了赋值语句一样: 查看代码 counter++; delete操作符有删除对象属性的重要副效应。因此,一般都把它作为一个语句使用,而不是放在某
阅读全文