AL JS 试题

  1. 编写函数, 筛选对象, 将 key 为字母, 数字, 中文的键值对分别放置到 enKeyObjnumKeyObjcnKeyObj

    const mixObj = { Hello: 0, 你: 3, Js: 1, 5: 6, 好: 4, 7: 8, }; function filterObject(mixObj) { const filteredObj = { enKeyObj: {}, numKeyObj: {}, cnKeyObj: {}, }; //...请编写具体实现 return filteredObj; } const { enKeyObj, numKeyObj, cnKeyObj } = filterObject(mixObj);

参考: 174 道 JavaScript 面试题,助你查漏补缺

  1. DOM 是什么的缩写, 请给出全称

  2. 简述 Javascript 和 ECMAScript 的关系

  3. 请给出一下代码输出结果

    var a = 1; function update1(a) { a = 2; } update1(a); console.log(a);
  4. JS 的基本数据类型

  5. 列举 3 种判断数据类型的方法, 哪个最准确 JS 判断数据类型1

  6. js 中整数的安全范围是多少?(提示: JS 内置变量, 不用给出具体数值)

  7. isNaN 和 Number.isNaN 函数的区别?

  8. 如何判断一个变量不是是数组

  9. 简述 Array.of​的作用

  10. document.getElementsByTagName("div")​ 这段代码的返回值是什么数据类型? 如何转成数组?

  11. 简述包装类型

  12. {}.toString()​ 的执行结果是什么

  13. 编写一个函数, 可以取值任意范围内的随机

    function getRandomNum(min, max) { if (Number.isNaN(min) || Number.isNaN(max)) { throw new Error("min max 需要为数字"); } if (max < min || max == min) { throw new Error("请给出合理随机值范围"); } // 实现 }
  14. 给出以下代码执行结果

    let a = 5; let b = a++; let c = ++a; console.log(a, b, c);
  15. 给出以下代码执行结果

    const a = "" || 0; const b = "" && 1; console.log(a, b);
  16. 给出以下代码执行结果

    const a = NaN == NaN; const b = undefined == null; console.log(a, b);
  17. innerHTML​ 与 outerHTML​ 的区别?

  18. .call()​ 和 .apply​() 的区别?

  19. 编写函数, 筛选对象, 将 key 为字母, 数字, 中文的键值对分别放置到 enKeyObjnumKeyObjcnKeyObj

    const mixObj = { Hello: 0, 你: 3, Js: 1, 5: 6, 好: 4, 7: 8, }; function filterObject(mixObj) { const filteredObj = { enKeyObj: {}, numKeyObj: {}, cnKeyObj: {}, }; //...请编写具体实现 return filteredObj; } const { enKeyObj, numKeyObj, cnKeyObj } = filterObject(mixObj);

数组相关

  1. 遍历的数组方法有哪些(共有 10 种, 尽力给出即可)

  2. 分离出 str​ 中的数字并去重排序, 并以字符串方式输出

    const str = "Hello Js 123 你好 Js 908^*&&)(230-)1450909"; // 期望输出结果 01234589
  3. 编写函数, 将下面的二维数组变为一维数组(要求: 使用 map​函数)

    const dbArr = [ ["a", "b"], ["c", "d"], ["e", "f"], ]; function flatArr(arr) { // ...编写实现 } const arr = flatArr(dbArr); console.log(arr);
    1. 编写函数, 计算每个字符在字符串中出现的次数, 且去除空字符

      const a = `Nulla consequat voluptate elit elit mollit Lorem excepteur tempor laborum. Ad in cillum pariatur aute voluptate Lorem aliqua tempor non nostrud ullamco cup 之足司,秦生是吴俭的无处爱虽极此事德中春而别案,曾作动承担太治竟气也秦治,妄种好五气决对不十事承,才貂同谓,好不你血十年病但设快自。 人五人如才二使后德县在人亓,终有未马仍清实,流决予而活看恶他作,卑后千没说郭你最国杀也领,丈用没用若和斯的于土往生生即君之,有谭定弄之人 无不好的文我今清行到,在太要我可位位,高招者不才之非要上一惜天到尺韩有,变言之若天张韩远千求她负徨那付,人为范,低竟投。 idatat velit aute. Sit sit consequat eiusmod sit laboris duis. Aliqua consectetur deserunt consectetur amet ipsum duis quis magna do velit velit.`;
  4. 将以下数组转换城树形数据

    const cars = [ // 吉利车型 { mode: "银河E8", brand: "Geely", subBrand: "Galaxy" }, { mode: "银河L6", brand: "Geely", subBrand: "Galaxy" }, { mode: "几何A", brand: "Geely", subBrand: "Galaxy" }, { mode: "帝豪EC8", brand: "Geely", subBrand: "Emgrand" }, { mode: "帝豪GL", brand: "Geely", subBrand: "Emgrand" }, { mode: "博瑞", brand: "Geely", subBrand: "Borui" }, { mode: "远景", brand: "Geely", subBrand: "Yuanjing" }, // 比亚迪车型 { mode: "海豹", brand: "BYD", subBrand: "Ocean" }, { mode: "海豚", brand: "BYD", subBrand: "Ocean" }, { mode: "唐EV", brand: "BYD", subBrand: "Tang" }, { mode: "汉EV", brand: "BYD", subBrand: "Han" }, { mode: "秦PLUS EV", brand: "BYD", subBrand: "Qin" }, { mode: "元PLUS", brand: "BYD", subBrand: "Yuan" }, // 特斯拉车型 { mode: "Model 3", brand: "Tesla", subBrand: "Original" }, { mode: "Model S", brand: "Tesla", subBrand: "Original" }, { mode: "Model X", brand: "Tesla", subBrand: "Original" }, { mode: "Model Y", brand: "Tesla", subBrand: "Original" }, ];

    目标数据结果

    const carTree = { Geely: { Galaxy: ["银河E8", "银河L6", "几何A"], Emgrand: ["帝豪EC8", "帝豪GL"], Borui: ["博瑞"], Yuanjing: ["远景"], }, BYD: { Ocean: ["海豹", "海豚"], Tang: ["唐EV"], Han: ["汉EV"], Qin: ["秦PLUS EV"], Yuan: ["元PLUS"], }, Tesla: { Original: ["Model 3", "Model S", "Model X", "Model Y"], }, };
  5. 如何快速清空一个数组

    const arr = ["b", "b", "c"]; //... 一行代码 console.log("输出结果:", arr); // 输出结果: []
  6. 求数组交集

    var numOne = [0, 2, 4, 6, 8, 8]; var numTwo = [1, 2, 3, 4, 5, 6]; function getIntersection(arr1, arr2) { // ...实现 } console.log(getIntersection(numOne, numTwo)); // [2, 4, 6]


  1. JS 判断数据类型

    在 JavaScript 中,判断数据类型的方法有多种,每种方法适用于不同的场景。以下是一些常用的方法及其特点:

    1. typeof

    • 用法typeof​ 是一个操作符,用于返回变量的数据类型。

    • 返回值:返回一个字符串,表示数据类型。

    • 限制

      • 对于基本类型(如 number​、string​、boolean​、undefined​),返回正确的类型。
      • 对于 null​ 和数组,均返回 "object"​。
      • 对于函数,返回 "function"​。
    console.log(typeof 123); // "number" console.log(typeof "hello"); // "string" console.log(typeof null); // "object" console.log(typeof []); // "object" console.log(typeof function(){}); // "function"

    2. instanceof

    • 用法instanceof​ 用于检查一个对象是否是某个构造函数的实例。
    • 适用范围:主要用于引用类型的判断,如数组和对象。
    • 限制:不能用于基本数据类型。
    console.log([] instanceof Array); // true console.log({} instanceof Object); // true console.log(null instanceof Object); // false

    3. Object.prototype.toString.call()

    • 用法:通过调用 Object.prototype.toString.call()​ 方法,可以准确判断数据类型。
    • 返回值:返回格式为 [object Type]​ 的字符串,其中 Type​ 是具体的数据类型。
    • 优点:能够区分所有数据类型,包括数组和 null​。
    console.log(Object.prototype.toString.call(123)); // "[object Number]" console.log(Object.prototype.toString.call([])); // "[object Array]" console.log(Object.prototype.toString.call(null)); // "[object Null]"

    4. constructor 属性

    • 用法:通过对象的 constructor​ 属性可以判断其构造函数。
    • 限制:对于 null​ 和 undefined​ 没有 constructor​ 属性。
    console.log((123).constructor === Number); // true console.log([1, 2, 3].constructor === Array); // true

    5. Array.isArray()

    • 用法:专门用于判断一个值是否为数组。
    • 返回值:如果是数组则返回 true​,否则返回 false​。
    console.log(Array.isArray([1, 2, 3])); // true console.log(Array.isArray({})); // false

    总结

    在 JavaScript 中,选择合适的方法来判断数据类型非常重要。对于简单的基本数据类型,可以使用 typeof​;而对于复杂的数据结构,尤其是需要区分数组和对象时,使用 Object.prototype.toString.call()​ 是更为可靠的方法。结合这些方法,可以实现一个全面的数据类型判断函数,以满足不同的需求。

    Citations:
    [1] https://segmentfault.com/a/1190000018160547
    [2] https://juejin.cn/post/7200396667505704997
    [3] https://blog.csdn.net/Clara_G/article/details/104755965
    [4] https://juejin.cn/post/7000300249235357709
    [5] https://www.cnblogs.com/onepixel/p/5126046.html
    [6] https://segmentfault.com/a/1190000015264821

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖 • 4 关注

相关帖子

1 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • ElegantLee via macOS

    面的哪家公司?能贴一下对应题解吗?

推荐标签 标签

  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 759 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 616 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 553 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 29 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    22 引用 • 214 回帖 • 1 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 114 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 250 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1243 回帖 • 410 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 271 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25240 引用 • 104115 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 228 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 647 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 2 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 4 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖 • 2 关注
  • Access
    1 引用 • 3 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 814 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    187 引用 • 318 回帖 • 256 关注