Javascript面試題及詳細答案150道之(031-045)

前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括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…