CS6面试题:JavaScript挑战与Promise解析

需积分: 8 0 下载量 175 浏览量 更新于2024-09-02 收藏 14KB DOCX 举报
"cs6面试题共包含三十题,主要涉及JavaScript和Promise等编程概念,包括结构赋值、对象遍历、Set数据结构、Promise的使用以及Promise类的手写实现。" 在这些面试题中,我们可以深入探讨几个关键的JavaScript知识点: 1. 结构赋值: 结构赋值是ES6引入的一种新的赋值方式,可以方便地交换变量的值,如题目所示。`[a, b] = [b, a]`,这里的数组解构赋值实际上创建了一个新的数组并交换了`a`和`b`指向的值,无需借助临时变量。 2. Symbol作为对象的键: Symbol是ES6引入的一种新的原始数据类型,它是唯一的,不可变的。在对象中,使用Symbol作为键可以避免与字符串键的冲突。例如,`let name = Symbol('name')`,然后可以创建一个对象`product`,其键`name`是一个Symbol,这在遍历时需要注意,因为常规的`for...in`循环不会遍历Symbol键,可以使用`Reflect.ownKeys()`来获取包括Symbol键在内的所有键。 3. Set数据结构的size属性: Set不允许有重复的元素,所以即使两个数组看起来一样,如`[1]`,在Set中也会被视为不同的项。因此,当添加两个`[1]`到Set时,`size`值为2,因为它们在内存中有不同的引用。 4. Promise的reject和catch: 在Promise中,`reject`用于抛出异常,它会将Promise的状态从`pending`变为`rejected`。`catch`方法则是用来捕获并处理`reject`产生的错误,或者当`then`的第二个参数不提供回调时,处理`reject`的值。网络异常通常会导致Promise直接进入`catch`,而不是`then`的第二个回调。 5. 手写Promise类: 创建一个自定义的Promise类,需要实现一个构造函数,接收一个执行器函数。执行器内部应分别定义`resolveFn`和`rejectFn`,这两个函数会改变Promise的状态。同时,状态必须在`pending`时才能改变,以确保异步操作的正确顺序。 这些面试题考察了对JavaScript高级特性的理解和应用,包括新的数据结构、异步控制流以及对象和符号的使用,这些都是现代JavaScript开发中的核心技能。理解并掌握这些知识点对于提升JavaScript编程能力和解决实际问题至关重要。