AL JS 试题

本贴最后更新于 211 天前,其中的信息可能已经沧海桑田
  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 引用 • 1282 回帖 • 1 关注

相关帖子

1 回帖

欢迎来到这里!

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

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

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

推荐标签 标签

  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 3 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 827 关注
  • 自由行
    2 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    44 引用 • 208 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 10 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 411 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 642 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 738 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    186 引用 • 1021 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 708 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 633 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖 • 2 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1538 回帖
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 736 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    300 引用 • 768 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖 • 1 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 312 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 91 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 281 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 380 关注