interview
javascript-frontend-basics
JavaScript 如何判断一个对象是不是空对象

前端 JavaScript 基础面试题, JavaScript 如何判断一个对象是不是空对象?

前端 JavaScript 基础面试题, JavaScript 如何判断一个对象是不是空对象?

QA

Step 1

Q:: JavaScript 如何判断一个对象是不是空对象?

A:: 可以使用 Object.keys 方法来判断一个对象是否为空对象。如果返回的数组长度为 0,则该对象为空对象。 示例代码如下:

 
const isEmptyObject = (obj) => {
  return Object.keys(obj).length === 0 && obj.constructor === Object;
};
const obj = {};
console.log(isEmptyObject(obj)); // true
 

Step 2

Q:: JavaScript 中如何实现深拷贝?

A:: 可以使用 JSON.parse(JSON.stringify(object)) 方法实现深拷贝,但该方法有局限性,比如无法拷贝函数、undefined、循环引用等。更好的方法是使用递归或 lodash 库的 cloneDeep 方法。 示例代码如下:

 
const obj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(obj));
// 或使用 lodash 库
// const _ = require('lodash');
// const deepCopy = _.cloneDeep(obj);
 

Step 3

Q:: JavaScript 中如何判断变量的类型?

A:: 可以使用 typeof 操作符和 instanceof 操作符来判断变量的类型。 示例代码如下:

 
console.log(typeof 123); // 'number'
console.log(typeof 'abc'); // 'string'
console.log([] instanceof Array); // true
console.log({} instanceof Object); // true
 

用途

面试这些内容是为了评估候选人对 JavaScript 基础知识的掌握情况。这些知识在实际生产环境中非常重要,因为它们涉及到数据操作、对象操作以及代码的可维护性和性能优化。在开发过程中,常常需要判断对象是否为空、进行深拷贝以避免数据污染,以及准确判断变量类型以确保代码的正确性。\n

相关问题

🦆
JavaScript 中什么是闭包?

闭包是指有权访问另一个函数作用域中的变量的函数。它使得内部函数可以记住并访问其词法作用域,即使该函数是在其词法作用域之外执行。 示例代码如下:

 
function outerFunction() {
  let outerVariable = 'I am outside!';
  function innerFunction() {
    console.log(outerVariable); // I am outside!
  }
  return innerFunction;
}
const closure = outerFunction();
closure();
 
🦆
什么是原型链?

原型链是 JavaScript 实现继承的基础。当访问对象的属性时,如果该对象没有该属性,则会沿着原型链向上查找,直到找到该属性或到达原型链的末尾(即 null)。 示例代码如下:

 
function Person(name) {
  this.name = name;
}
Person.prototype.sayName = function() {
  console.log(this.name);
};
const person1 = new Person('John');
person1.sayName(); // John
 
🦆
JavaScript 中的事件委托是什么?

事件委托是将事件处理器添加到父级元素上,而不是每个子元素。利用事件冒泡机制,可以在父级元素上管理多个子元素的事件。 示例代码如下:

 
document.getElementById('parent').addEventListener('click', function(event) {
  if (event.target && event.target.nodeName === 'BUTTON') {
    console.log('Button clicked', event.target);
  }
});