前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 31. 什么是类数组对象?如何将其转换为真正的数组?
      • 32. 箭头函数与普通函数有哪些区别?
      • 33. 什么是解构赋值?举例说明数组和对象的解构
      • 34. 如何检查对象是否具有某个属性?
      • 35. 什么是原型继承?如何实现原型继承?
      • 36. 什么是函数的返回值?不写return时函数返回什么?
      • 37. 什么是模板字符串?它有哪些特点?
      • 38. 如何获取对象的所有属性名?
      • 39. 什么是默认参数?如何设置函数的默认参数?
      • 40. 什么是剩余参数?它与arguments有何区别?
      • 41. 如何遍历对象的属性?
      • 42. 什么是Promise?它有哪些状态?
      • 43. Promise的链式调用有什么作用?
      • 44. Promise.all()和Promise.race()的区别是什么?
      • 45. 什么是async/await?它有什么优势?
  • 二、150道面试题目录列表

一、本文面试题目录

31. 什么是类数组对象?如何将其转换为真正的数组?

类数组对象是具有length属性,且属性为非负整数的对象,如函数的arguments对象、DOM元素集合等。它们不能直接使用数组的方法。
转换为真正数组的方法:

  • 使用Array.from():Array.from(arguments)
  • 使用扩展运算符:[...arguments]
  • 借助数组的slice方法:Array.prototype.slice.call(arguments)

示例代码:

function test() {// arguments是类数组对象const arr1 = Array.from(arguments);const arr2 = [...arguments];const arr3 = Array.prototype.slice.call(arguments);console.log(Array.isArray(arr1)); // true
}
test(1, 2, 3);

32. 箭头函数与普通函数有哪些区别?

  • 箭头函数没有自己的this,继承外层作用域的this。
  • 箭头函数不能作为构造函数,不能用new调用。
  • 箭头函数没有arguments对象,可通过剩余参数…args获取参数。
  • 箭头函数不能使用yield,不能作为生成器函数。
  • 箭头函数没有prototype属性。

示例代码:

const arrowFunc = () => {console.log(this); // 继承外层this
};
function normalFunc() {console.log(this); // 取决于调用方式
}
// new arrowFunc(); // 报错,箭头函数不能作为构造函数

33. 什么是解构赋值?举例说明数组和对象的解构

解构赋值是一种快速从数组或对象中提取值并赋值给变量的语法。

  • 数组解构:按位置匹配赋值
const [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3
const [x, , y] = [4, 5, 6]; // 跳过第二个元素
console.log(x, y); // 4 6
const [p, q = 10] = [7]; // 设置默认值
console.log(p, q); // 7 10
  • 对象解构:按属性名匹配赋值
const { name, age } = { name: 'Tom', age: 20 };
console.log(name, age); // Tom 20
const { id: userId, score = 60 } = { id: 101 }; // 重命名并设默认值
console.log(userId, score); // 101 60

34. 如何检查对象是否具有某个属性?

  • 使用in运算符:'属性名' in 对象,返回布尔值,包括继承的属性。
  • 使用对象的hasOwnProperty()方法:对象.hasOwnProperty('属性名'),只检查自身属性,不包括继承的。
  • 直接访问属性:若属性值为undefined,可能是属性不存在或值为undefined,不够准确。

示例代码:

const obj = { a: 1 };
console.log('a' in obj); // true
console.log('toString' in obj); // true(继承自Object.prototype)
console.log(obj.hasOwnProperty('a')); // true
console.log(obj.hasOwnProperty('toString')); // false

35. 什么是原型继承?如何实现原型继承?

原型继承是利用原型链让一个对象继承另一个对象的属性和方法。实现方式是将子构造函数的原型指向父构造函数的实例。

示例代码:

function Parent() {this.parentProp = 'parent';
}
Parent.prototype.parentMethod = function() {console.log('parent method');
};
function Child() {this.childProp = 'child';
}
// 实现原型继承
Child.prototype = new Parent();
Child.prototype.constructor = Child; // 修复constructor指向const child = new Child();
console.log(child.parentProp); // parent
child.parentMethod(); // parent method

36. 什么是函数的返回值?不写return时函数返回什么?

函数的返回值是函数执行完成后通过return语句返回的结果。若函数中不写return,或return后没有值,函数默认返回undefined。

示例代码:

function add(a, b) {return a + b;
}
console.log(add(2, 3)); // 5function sayHi() {console.log('Hi');// 没有return
}
console.log(sayHi()); // undefinedfunction emptyReturn() {return;
}
console.log(emptyReturn()); // undefined

37. 什么是模板字符串?它有哪些特点?

模板字符串是用反引号``包裹的字符串,特点:

  • 可换行,保留换行符和空格。
  • 可通过${}嵌入变量或表达式。
  • 可嵌套使用。

示例代码:

const name = 'Alice';
const age = 25;
const str = `Name: ${name}, Age: ${age + 5}
This is a new line`;
console.log(str);
// 输出:
// Name: Alice, Age: 30
// This is a new line
No.大剑师精品GIS教程推荐
0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】
1Openlayers 【入门教程】 - 【源代码+示例 300+】
2Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3MapboxGL【入门教程】 - 【源代码+图文示例150+】
4Cesium 【入门教程】 - 【源代码+综合教程 200+】
5threejs【中文API】 - 【源代码+图文示例200+】
6Shader 编程 【图文示例 100+】

38. 如何获取对象的所有属性名?

  • Object.keys():返回对象自身可枚举属性名组成的数组。
  • Object.getOwnPropertyNames():返回对象自身所有属性名(包括不可枚举的,除Symbol属性)组成的数组。
  • Object.getOwnPropertySymbols():返回对象自身所有Symbol属性名组成的数组。

示例代码:

const obj = { a: 1, [Symbol('b')]: 2 };
Object.defineProperty(obj, 'c', { value: 3, enumerable: false });
console.log(Object.keys(obj)); // ['a']
console.log(Object.getOwnPropertyNames(obj)); // ['a', 'c']
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(b)]

39. 什么是默认参数?如何设置函数的默认参数?

默认参数是在函数定义时为参数指定默认值,当调用函数时未传递该参数或传递undefined时,使用默认值。

示例代码:

function greet(name = 'Guest', message = 'Hello') {console.log(`${message}, ${name}!`);
}
greet('Bob'); // Hello, Bob!
greet(); // Hello, Guest!
greet(undefined, 'Hi'); // Hi, Guest!

40. 什么是剩余参数?它与arguments有何区别?

剩余参数用…变量名表示,用于收集函数的剩余参数,返回一个数组。
区别:

  • 剩余参数是数组,可直接使用数组方法;arguments是类数组对象。
  • 剩余参数只包含未被显式声明的参数;arguments包含所有参数。
  • 箭头函数没有arguments,但可以使用剩余参数。

示例代码:

function sum(...nums) {return nums.reduce((acc, cur) => acc + cur, 0);
}
console.log(sum(1, 2, 3)); // 6const arrowSum = (...nums) => nums.reduce((acc, cur) => acc + cur, 0);

41. 如何遍历对象的属性?

  • for…in循环:遍历对象自身和继承的可枚举属性(不含Symbol属性)。
  • Object.keys()结合forEach:遍历自身可枚举属性。
  • Object.getOwnPropertyNames()结合forEach:遍历自身所有属性(含不可枚举)。

示例代码:

const obj = { a: 1, b: 2 };
// for...in
for (const key in obj) {if (obj.hasOwnProperty(key)) { // 过滤继承的属性console.log(key, obj[key]);}
}
// Object.keys()
Object.keys(obj).forEach(key => {console.log(key, obj[key]);
});

42. 什么是Promise?它有哪些状态?

Promise是用于处理异步操作的对象,有三种状态:

  • pending(进行中):初始状态,既不是成功也不是失败。
  • fulfilled(已成功):操作完成,会调用then()方法的回调。
  • rejected(已失败):操作失败,会调用catch()方法的回调。
    状态一旦改变就不会再变,只能从pending变为fulfilled或rejected。

示例代码:

const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('成功'); // 从pending变为fulfilled// reject('失败'); // 从pending变为rejected}, 1000);
});
promise.then(res => console.log(res)).catch(err => console.log(err));

43. Promise的链式调用有什么作用?

Promise的链式调用可以解决回调地狱问题,使异步操作按顺序执行,每个then()返回一个新的Promise对象,可继续调用then()或catch()。

示例代码:

fetchData1().then(data1 => {console.log(data1);return fetchData2(data1); // 返回新的Promise}).then(data2 => {console.log(data2);return fetchData3(data2);}).then(data3 => console.log(data3)).catch(err => console.log('出错了:', err));

44. Promise.all()和Promise.race()的区别是什么?

  • Promise.all(iterable):接收一个可迭代对象,当所有Promise都fulfilled时,返回一个fulfilled的Promise,结果是所有结果的数组;只要有一个rejected,就返回rejected的Promise,结果是第一个rejected的原因。
  • Promise.race(iterable):接收一个可迭代对象,返回第一个改变状态的Promise的结果(无论是fulfilled还是rejected)。

示例代码:

const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.reject(3);Promise.all([p1, p2]).then(res => console.log(res)); // [1, 2]
Promise.all([p1, p3]).catch(err => console.log(err)); // 3Promise.race([p1, p2]).then(res => console.log(res)); // 1(p1先fulfilled)

45. 什么是async/await?它有什么优势?

async/await是基于Promise的语法糖,使异步代码看起来像同步代码,更易读、易维护。

  • async用于声明异步函数,函数返回一个Promise。
  • await用于等待一个Promise对象,只能在async函数中使用。

优势:代码结构清晰,避免链式调用,错误处理更简单(可使用try/catch)。

示例代码:

async function fetchData() {try {const res1 = await fetchData1();const res2 = await fetchData2(res1);console.log(res2);} catch (err) {console.log(err);}
}

二、150道面试题目录列表

文章序号Javascript面试题150道
1Javascript面试题及答案150道(001-015)
2Javascript面试题及答案150道(016-030)
3Javascript面试题及答案150道(031-045)
4Javascript面试题及答案150道(046-060)
5Javascript面试题及答案150道(061-075)
6Javascript面试题及答案150道(076-090)
7Javascript面试题及答案150道(091-105)
8Javascript面试题及答案150道(106-120)
9Javascript面试题及答案150道(121-135)
10Javascript面试题及答案150道(136-150)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94300.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94300.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94300.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git如何同步本地与远程仓库并解决冲突

在团队协作开发中,保持本地仓库与远程仓库同步是至关重要的。本文将详细介绍如何使用 Git 更新本地仓库至最新远程版本,并深入解析冲突的产生原因及解决方法。一、同步本地与远程仓库1. 检查远程仓库配置首先,确保本地仓库已正确关联远程仓库…

Hadoop MapReduce 3.3.4 讲解~

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

1、【数学】【硬币悖论】旋转硬币问题

问题描述: 两个相同的硬币,半径都是 rrr。一个硬币(称为“动硬币”)沿着另一个固定不动的硬币(“静硬币”)的外边缘无滑动地滚动一圈,回到起始位置。问:动硬币自身旋转了几圈&#x…

【盘古100Pro+开发板实验例程】FPGA学习 | PCIE 通信测试实验例程

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 1. 实验简介 实验目的: 完成 PCIE 通信测试。 实验环境: Window11 PDS2022.2-SP6.4 硬件环…

基于高阶累积量的调制识别

基于高阶累积量的调制识别是一种利用信号的高阶统计特性来识别不同调制方式的方法。 1. 基本原理 高阶累积量(Higher-Order Cumulants)是信号处理中的一个重要工具,能够捕捉信号的非高斯特性。与高阶矩相比,高阶累积量对高斯噪声具…

Java常用数据结构入门

Java常用数据结构入门 前言 数据结构是程序设计中的基础,掌握常用数据结构能帮助你更高效地解决问题。本文面向Java初学者,介绍Java中常用的数据结构及其基本使用方法。 1. 数组 (Array) 数组是最基础的数据结构,可以存储固定大小的同类型…

Android GPU测试

一、Basemark GPU 可选择进行vulkan和opengl测试: 二、GFXBench 进行各种offscreen测试(包括曼哈顿离屏) 这是由GFXBench图形性能测试套件提供的一个著名3D图形渲染场景。 它模拟了一个复杂的未来都市环境(类似曼哈顿&#xff…

2025年6月最新SCI-灰熊脂肪增长优化算法Grizzly Bear Fat Increase-附Matlab免费代码

引言 本期介绍一种受自然启发的创新算法——灰熊脂肪增长优化算法Grizzly Bear Fat Increase optimizer,GBFIO。GBFIO算法模仿灰熊为准备过冬而积累身体脂肪的自然行为,借鉴了它们的狩猎、捕鱼、吃草、蜂蜜等策略。于2025年6月发表在JCR 1区&#xff0c…

Pytorch实现一个简单的贝叶斯卷积神经网络模型

贝叶斯深度模型的主要特点和实现说明:模型结构:结合了常规卷积层(用于特征提取)和贝叶斯线性层(用于分类)贝叶斯层将权重视为随机变量,而非传统神经网络中的确定值使用变分推断来近似权重的后验…

Dubbo 3.x源码(32)—Dubbo Provider处理服务调用请求源码

基于Dubbo 3.1,详细介绍了Dubbo Provider处理服务调用请求源码 上文我们学习了,Dubbo消息的编码解的源码。现在我们来学习一下Dubbo Provider处理服务调用请求源码。 当前consumer发起了rpc请求,经过请求编码之后到达provider端,…

每日一leetcode:移动零

目录 解题过程: 描述: 分析条件: 解题思路: 通过这道题可以学到什么: 解题过程: 描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操…

6-Django项目实战-[dtoken]-用户登录模块

1.创建应用 python manage.py startapp dtoken 2.注册应用 settings.py中注册 3.匹配路由4.编写登录功能视图函数 import hashlib import json import timeimport jwt from django.conf import settings from django.http import JsonResponse from user.models import UserPro…

Axure日期日历高保真动态交互原型

在数字化产品设计中,日期日历组件作为高频交互元素,其功能完整性与用户体验直接影响着用户对产品的信任度。本次带来的日期日历高保真动态交互原型,依照Element UI、View UI等主流前端框架为参考,通过动态面板、中继器、函数、交互…

【YOLOv4】

YOLOv4 论文地址::【https://arxiv.org/pdf/2004.10934】 YOLOv4 论文中文翻译地址:【深度学习论文阅读目标检测篇(七)中文版:YOLOv4《Optimal Speed and Accuracy of Object Detection》-CSDN博客】 yol…

【秋招笔试】2025.08.03虾皮秋招笔试-第一题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 01. 蛋糕切分的最大收益 问题描述 K小姐经营着一家甜品店,今天她有一块长度为 n n n 厘米的长条蛋糕需要切分。根据店里的规定,她必须将蛋糕切成至少 2 2

2.0 vue工程项目的创建

前提准备.需要电脑上已经安装了nodejs 参考 7.nodejs和npm简单使用_npmjs官网-CSDN博客 创建vue2工程 全局安装 Vue CLI 在终端中运行以下命令来全局安装 Vue CLI: npm install -g vue/cli npm install -g 表示全局安装。vue/cli 是 Vue CLI 的包名。 安装完成后…

视觉图像处理中级篇 [2]—— 外观检查 / 伤痕模式的原理与优化设置方法

外观缺陷检测是工业生产中的关键环节,而伤痕模式作为图像处理的核心算法,能精准识别工件表面的划痕、污迹等缺陷。掌握其原理和优化方法,对提升检测效率至关重要。一、利用伤痕模式进行外观检查虽然总称为外观检查,但根据检查对象…

ethtool,lspci,iperf工具常用命令总结

ethtool、lspci 和 iperf 是 Linux 系统中进行网络硬件查看、配置和性能测试的核心命令行工具。下面是它们的常用命令分析和总结: 核心作用总结: lspci: 侦察兵 - 列出系统所有 PCI/PCIe 总线上的硬件设备信息,主要用于识别网卡型号、制造商、…

DAY10DAY11-新世纪DL(DeepLearning/深度学习)战士:序

本文参考视频[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili 参考文章0.0 目录-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授-CSDN博客 1深度学习概论 1.举例介绍 lg房价预测:房价与面积之间的坐标关系如图所示,由线性回归…

flutter release调试插件

chucker_flutter (只有网络请求的信息,亲测可以用) flutter:3.24.3 使用版本 chucker_flutter: 1.8.2 chucker_flutter | Flutter package void main() async {// 可以控制显示ChuckerFlutter.showNotification false;ChuckerF…