经典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;
}
目录
相关文章
|
1天前
|
前端开发 JavaScript
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
|
1天前
|
前端开发 JavaScript
JavaScript:this-关键字,2024中级前端开发面试解答
JavaScript:this-关键字,2024中级前端开发面试解答
|
2天前
|
JSON JavaScript 前端开发
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
|
2天前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试
|
2天前
|
JSON 前端开发 JavaScript
【JavaScript】面试手撕深拷贝(2),2024年最新nacos面试题及答案
【JavaScript】面试手撕深拷贝(2),2024年最新nacos面试题及答案
【JavaScript】面试手撕深拷贝(2),2024年最新nacos面试题及答案
|
2天前
|
JSON JavaScript 前端开发
【JavaScript】面试手撕深拷贝(1),面试前必看的一本书书籍是什么
【JavaScript】面试手撕深拷贝(1),面试前必看的一本书书籍是什么
|
2天前
|
缓存 前端开发 JavaScript
Javascript模块化开发基础,最新美团点评前端团队面试题
Javascript模块化开发基础,最新美团点评前端团队面试题
|
2天前
|
JavaScript 前端开发 程序员
javascript基础(入门),当上项目经理才知道,推荐程序员面试秘籍
javascript基础(入门),当上项目经理才知道,推荐程序员面试秘籍
|
4天前
|
自然语言处理 JavaScript 前端开发
三个JavaScript面试题
【5月更文挑战第7天】- 闭包是JavaScript函数能记住词法作用域,即使在外部执行。示例:计数器函数`createCounter()`返回访问`count`的匿名函数,每次调用计数递增。 - 事件循环处理异步操作,通过检查任务队列执行回调。示例:`setTimeout`异步任务在3秒后添加到队列,待执行,输出顺序为同步任务1、2,然后异步任务1。 - 箭头函数是ES6简洁的函数定义方式,如`greet = name => `Hello, ${name}!`。它没有自己的`this`,不适用作构造函数。
30 6
|
4天前
|
存储 JavaScript 前端开发
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗