interview
javascript-frontend-basics
如何获取安全的 undefined 值

前端 JavaScript 基础面试题, 如何获取安全的 undefined 值?

前端 JavaScript 基础面试题, 如何获取安全的 undefined 值?

QA

Step 1

Q:: 如何获取安全的 undefined 值?

A:: 在 JavaScript 中,安全获取 undefined 值的方式有多种。最常见的是直接使用 undefined 关键字。为了避免意外地重写 undefined,可以通过如下方法获取一个真正的 undefined 值:1. 通过 void 操作符,如 void 0;2. 自定义函数参数未提供默认值,如 function foo(x) { return x; }(undefined)。这些方法确保我们获得的是未定义值。

Step 2

Q:: 什么是闭包(Closure)?

A:: 闭包是指那些能够访问自由变量的函数。换句话说,闭包可以捕获并记住其所在的词法作用域,即使函数在其词法作用域之外执行。例如:function outer() { var x = 10; function inner() { console.log(x); } return inner; } var closure = outer(); closure(); // 输出 10。这里的 inner 函数就是一个闭包,它捕获了外部函数 outer 的变量 x。

Step 3

Q:: JavaScript 中的事件冒泡和事件捕获是什么?

A:: 事件冒泡和事件捕获是 DOM 事件处理的两个阶段。事件捕获从文档的根节点开始向目标节点传播,而事件冒泡则是从目标节点开始向上至根节点传播。可以通过 addEventListener 方法的第三个参数来指定是使用捕获还是冒泡:element.addEventListener('click', handler, true) 表示捕获,element.addEventListener('click', handler, false) 表示冒泡。

Step 4

Q:: 如何实现继承?

A:: 在 JavaScript 中,可以通过原型链或 ES6 的 class 关键字实现继承。通过原型链:function Parent() {} Parent.prototype.sayHello = function() { console.log('Hello'); } function Child() {} Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child; var child = new Child(); child.sayHello(); // 输出 'Hello'。通过 class 关键字:class Parent { sayHello() { console.log('Hello'); } } class Child extends Parent {} const child = new Child(); child.sayHello(); // 输出 'Hello'

Step 5

Q:: 什么是Promise,如何使用它?

A:: Promise 是一个表示异步操作最终完成或失败的对象。它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。可以使用 new Promise 创建一个 Promise 实例,并使用 then 和 catch 方法处理结果:let promise = new Promise((resolve, reject) => { // 异步操作完成后调用 resolve 或 reject }); promise.then(value => { console.log(value); }).catch(error => { console.log(error); });

用途

这些面试题涵盖了 JavaScript 的核心概念和常见编程实践。在实际生产环境中,这些知识有助于开发人员编写高效、可靠和可维护的代码。了解 undefined 的获取方式可以避免意外错误,闭包有助于实现更复杂的功能模块化,事件处理机制对于开发互动式用户界面至关重要,继承使代码更具复用性和组织性,而 Promise 则是处理异步操作的标准方法。\n

相关问题

🦆
如何检测一个变量是否为数组?

可以使用 Array.isArray(variable) 方法来检测一个变量是否为数组。例如:Array.isArray([]) // 返回 true,Array.isArray({}) // 返回 false。

🦆
如何在 JavaScript 中深拷贝一个对象?

可以使用 JSON.parse(JSON.stringify(object)) 方法进行深拷贝,但它不能拷贝函数和 undefined。更强大的方法是使用递归或第三方库(如 lodash 的 _.cloneDeep 方法)。

🦆
JavaScript 中的 this 是如何工作的?

this 的值在函数调用时确定,取决于函数的调用方式:1. 作为对象的方法调用,this 指向该对象;2. 作为普通函数调用,this 指向全局对象(严格模式下为 undefined);3. 使用 new 调用构造函数,this 指向新创建的对象;4. 使用 call、apply 或 bind 调用,this 被显式指定。

🦆
箭头函数和普通函数有什么区别?

箭头函数没有自己的 this、arguments、super 和 new.target,它们的 this 值由外层(非箭头函数)的作用域决定。此外,箭头函数不能用作构造函数,也没有原型。