经典JavaScript手写面试题和答案

简介: 经典JavaScript手写面试题和答案

实现一个函数去重?

function unique(array) {
   
  return Array.from(new Set(array));
}

实现一个函数,判断指定元素在数组中是否存在?

function includes(array, value) {
   
  for (let i = 0, len = array.length; i < len; i++) {
   
    if (array[i] === value) {
   
      return true;
    }
  }
  return false;
}

实现一个函数,将给定字符串反转?

function reverseString(str) {
   
  // 将字符串分割成一个数组
  const arr = str.split('');
  // 反转数组
  arr.reverse();
  // 将数组拼接成字符串
  return arr.join('');
}

实现一个函数,检测指定字符串是否为回文(即从前往后和从后往前的字符序列都相同)?

function isPalindrome(str) {
   
  // 将字符串反转后与原字符串比较
  return reverseString(str) === str;
}
// 利用上题的实现
function reverseString(str) {
   
  return str.split('').reverse().join('');
}

实现一个函数,计算两个数的最大公约数?

function gcd(num1, num2) {
   
  return num2 ? gcd(num2, num1 % num2) : num1;
}

实现Array.prototype.reduce函数

Array.prototype.myReduce = function(fn, initialValue) {
   
  let accum = initialValue === undefined ? undefined : initialValue;
  for (let i = 0; i < this.length; i++) {
   
    if (accum !== undefined) {
   
      accum = fn.call(undefined, accum, this[i], i, this);
    } else {
   
      accum = this[i];
    }
  }
  return accum;
};

实现 一个类似setTimeout的函数delay(ms)

function delay(ms) {
   
  return new Promise((resolve) => setTimeout(resolve, ms));
}

实现一个防抖函数debounce(fn, delayTime)

function debounce(fn, delayTime) {
   
  let timerId;
  return function() {
   
    const context = this;
    const args = arguments;
    clearTimeout(timerId);
    timerId = setTimeout(() => {
   
      fn.apply(context, args);
    }, delayTime);
  };
}

实现一个节流函数throttle(fn, intervalTime)

function throttle(fn, intervalTime) {
   
  let timerId;
  let canRun = true;
  return function() {
   
    const context = this;
    const args = arguments;
    if (!canRun) return;
    canRun = false;
    timerId = setTimeout(function() {
   
      fn.apply(context, args);
      canRun = true;
    }, intervalTime);
  };
}

实现一个深度拷贝函数deepClone(obj)

function deepClone(obj) {
   
  if (typeof obj !== 'object' || obj === null) {
   
    return obj;
  }
  let result = Array.isArray(obj) ? [] : {
   };
  for (let key in obj) {
   
    if (obj.hasOwnProperty(key)) {
   
      result[key] = deepClone(obj[key]);
    }
  }
  return result;
}
目录
相关文章
|
3月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
63 3
|
3月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
4月前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
64 3
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
37 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
2月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
4月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
46 0
|
4月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
4月前
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码
|
4月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
5月前
|
缓存 JavaScript 前端开发
js高频面试题,整理好咯
中级前端面试题,不低于12k,整理的是js较高频知识点,可能不够完善,大家有兴趣可以留言补充,我会逐步完善,若发现哪里有错,还请多多斧正。
下一篇
DataWorks