← 已是第一轮 · 返回本次面经 · 已是最后一轮 →
本轮概述: 该轮主要考察前端基础知识、JavaScript高级特性、HTTP协议、Vue与React框架对比、Git操作以及算法实现能力。问题涵盖理论理解与实际应用,氛围较为专业。
本轮共 16 道题。答案默认折叠,便于先自行作答。
1. 如何判断一个变量是数组? 题库原题:判断数组的方式有哪些?
题目要点 推荐方法:使用 Array.isArray(),这是最简单、最可靠的方式来检查一个值是否为数组。 其他方法:instanceof 和 Object.prototype.toString.call() 也很有效,但有一些特定的局限性。constructor 和 isPrototypeOf() 方法不如 Array.isArray() 可靠,且在某些情况下可能会出现问题。 参考答案 判断一个值是否为数组的方式有多种:
1. Array.isArray() 方法 描述:这是 ES5 引入的标准方法,推荐用于检查一个值是否为数组。 语法:Array.isArray(value) 示例: console.log(Array.isArray([1, 2, 3])); // true console.log(Array.isArray('hello')); // false 2. instanceof 操作符 描述:使用 instanceof 操作符来判断对象是否是 Array 的实例。 语法:value instanceof Array 示例: console.log([1, 2, 3] instanceof Array); // true console.log('hello' instanceof Array); // false 3. Object.prototype.toString.call() 方法 描述:使用 Object.prototype.toString.call() 可以准确判断一个对象的类型,包括数组。它返回 [object Array] 对于数组,其他类型则返回不同的结果。 语法:Object.prototype.toString.call(value) 示例: console.log(Object.prototype.toString.call([1, 2, 3])); // [object Array] console.log(Object.prototype.toString.call('hello')); // [object String] 4. constructor 属性 描述:检查 constructor 属性是否为 Array。这种方法不如 Array.isArray() 可靠,因为 constructor 可以被改变。 语法:value.constructor === Array 示例: console.log([1, 2, 3].constructor === Array); // true console.log('hello'.constructor === Array); // false 5. Array.prototype.isPrototypeOf() 方法 描述:检查数组的 prototype 是否在目标对象的 prototype 链上。这种方法也可以用来判断一个对象是否为数组。 语法:Array.prototype.isPrototypeOf(value) 示例: console.log(Array.prototype.isPrototypeOf([1, 2, 3])); // true console.log(Array.prototype.isPrototypeOf('hello')); // false 6. 使用 constructor 属性和原型链 描述:结合 constructor 属性和原型链检查。这个方法有一定的局限性,不推荐使用。 示例: function isArray(value) { return value && typeof value === 'object' && value.constructor === Array; } console.log(isArray([1, 2, 3])); // true console.log(isArray('hello')); // false 2. 讲一下闭包及其优缺点。 题目要点 函数嵌套, 词法作用域, 内存管理
...