JavaScript面试题(一)

1.js的数据类型有哪些

  • 基本类型:null,undfiend,boolean,number,string,symbol,bigin
  • 引用类型:Object(包含Object,Array,Function)

2.ES6新增了哪些内容

        let块级作用域声明方式、const声明常量、箭头函数、模版字符串、解构赋值、展开运算符、模块、class类、Set、Map、Promise

3.常用的运行算符

  • 算术运算符:+  -  *  /  %  ++  --  **
  • 比较运算符:==  ===  !=  !==  >  <  >=  <=
  • 逻辑运算符:&&  ||  !
  • 展开运算符
  • 三元运算符

4.运算符的优先级(从高到低)

  • 小括号 ()

  • 一元运算符 delete ++ -- !

  • 算术运算符 先乘除 * / % 后加减  -

  • 移位运算符 << >>

  • 比较运算符 先大小 > < >= <= 后相等 == !=

  • 按位运算符   |

  • 逻辑运算符 && ||

  • 三元运算符

  • 赋值 = += -= *= /= %= &= |= ^= <<= >>= >>>=

5.说一下innerHTML 与 innerText的作用与区别?

  1. 作用:都可以获取或者设置元素的内容
  2. 区别:innerHTML可以解析内容中的html标签
  3. innerText不能解析内容中的html标签

6.JavaScript 由以下三部分组成:

  • ECMAScript:是JavaScript的核心,描述了语言的基本语法和数据类型。它是一套标准,定义了一种语言的规范,规定了基本语法、数据类型、关键字等的设计规范,也是解析引擎设计的参考标准,但与具体实现无关。
  • DOM(文档对象模型):是一套操作页面元素的API,可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作,从而改变页面的内容和结构。
  • BOM(浏览器对象模型):是一套操作浏览器功能的API,通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等,与浏览器交互的部分功能都是通过BOM来实现的。

7.介绍 JS 有哪些内置对象?

  • 数据封装类对象:Object、Array、Boolean、Number、String
  • 其他对象:Function、Arguments、Math、Date、RegExp、Error
  • ES6 新增对象:Symbol、Map、Set、Promises、Proxy、Reflect

8.说几条写 JavaScript 书写的基本规范?

  • 代码一定要正确缩进,建议使用"二个或者四个空格"缩进
  • 语句结束使用分号;
  • 规范定义 JSON 对象,补全双引号
  • 用{}和[]声明对象和数组
  • 变量和函数在使用前进行声明
  • 以大写字母开头命名构造函数,全大写命名常量
  • 代码段使用花括号{}包裹
  • 还有要书写正确的标识标签

9.什么是标识符?

  • 在JS中,可以自定义命名的东西都属性标识符;
  • 比如变量名,函数名,参数名都是标识符

10.offsetWidth,clientWidth,scrollWidth的区别?

  • offsetWidth返回值包含 content + padding + border + 包含滚动条;
  • clientWidth返回值只包含 content + padding,不包含滚动条;
  • scrollWidth返回值包含 content + padding + 溢出内容的尺寸;

11.解释什么是Json

  • json是一种轻量级的数据交换格式,一般用于数据传递
  • 里边只允许出现双引号
  • JSON的语法表示三种类型值,简单值(字符串,数值,布尔值,null), 数组,对象

12.检测数据类型的方法有哪些

  • typeof:基本类型检测;
  • instanceof:判断a是否是b的实例;
  • Object.prototype.toString.call() :使用call把Object对象的toString方法指向value,获取value的原生构造函数名;
  • constructor:属性可能会被改写,导致检测结果不准确;

13.为什么typeof检测null等于object

       null 其实属于自己的类型 Null,而不属于Object类型。因为JavaScript 数据类型在底层是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。 属于javascript历史遗留问题。

14.为什么typeof检测Array等于object

       在JavaScript里 array 的原型是object.prototype,所以array会显示object

15.为什么typeof检测函数不等于object

        如果一个对象实现了[[call]]方法就是function,否则为object。

16.null和undfiend的区别

  • null。表示一个空的对象指针,通常用于表示一个变量不包含任何对象。在JavaScript中,null被视为一个空值或缺少值的对象指针,它是一个被明确赋予的值,用来表示没有有效的对象引用。转化为数值是0
  • undefined。表示一个未初始化(未定义)的值,通常用于表示尚未赋值的变量。在JavaScript中,undefined是一个全局变量,在没有被赋值的情况下,默认的初始值就是undefined。当你尝试使用一个未初始化的变量时,JavaScript引擎会返回undefined。转化为数值是NAN。

17.其他类型转化成数值

  • null 转换之后是 0
  • undefined 转换之后是 NaN
  • Object 转换之后是 NaN
  • String
    • 如果字符串中都是数值, 那么就可以正常转换
    • 如果字符串是一个空串 "" / " ", 那么转换之后就是 0
    • 如果字符串中不仅仅是数字, 那么转换之后是 NaN
  • Boolean
    • true 转换之后是 1
    • false 转换之后是 0
  • Array
    • 空数组,当将其转换成number时,得到的结果为0;
    • 只有一个数字成员的数组,得到的结果是该数字;
    • 多个数字成员的数组,得到的结果为NaN;

18.介绍一下symbol?怎么迭代symbol描述的键?

  • symbol是js为了解决命名冲突而引入的一种ES6新的基本数据类型,表示独一无表示独一无二的值。
    • 独一无二性:每个 Symbol 值都是唯一的,无法通过简单的值比较相等。
    • 不可变性:Symbol 值一旦创建,就不能被修改。
    • 隐藏性:使用 Symbol 作为属性键,这些属性对于常规的对象遍历和操作是不可见的。
    • 作为属性键:Symbol 可以作为对象的属性键,用于创建对象的私有属性或隐藏属性,以避免命名冲突。
  • symbol常用的的方法
    • Symbol.for() 全局符号注册表
    • Symbol.keyFor() 查询全局注册表
    • Object.getOwnPropertySymbols() 获取对象内部symbol命名的key
    • Reflect.ownKeys() 获取对象内部所有的key

19.介绍一下bigint?为什么会出现bigint

  • bigint是js为了解决数值过大导致的精度失真问题而引入的一种ES6新的基本数据类型,表示表示任意长度的整数。
  • bigint不能直接和普通数据类型进行运算,必须保证参与运算的值都是bigint类型
  • 创建bigint的方式有两种
    • 在一个整数字面量后面添加一个字母n,如9007199254740991n
    • 使用BigInt()函数将普通整数值转换为BigInt类型,如BigInt(9007199254740991)

20.var、let、const的作用

  • var :变量声明方式,声明的变量具有变量提升,一般情况下会提升到全局,但是在函数内部会形成局部变量。支持重复声明,支持修改。
  • let:块级作用域声明方式,不具备变量提升。不支持重复声明,支持修改。
  • const:常量声明方式,不具备变量提升。不支持重复声明,不支持修改。

21.const声明的引用类型数据可以修改吗

        因为const只能浅层检测引用类型数据指针(地址),所以不能直接修改引用类型数据的指针(地址),但是可以修改引用类型数据内部的元素。

22.Math常用的方法

  • min、max、abs绝对值、PI、pow幂、sqrt平方根、sell向上取整、floor向下取整、trunc保留整数位、round四舍五入、random随机数

23.数值常用的方法

  • toFixed(digits):将数字转换为指定小数位数的字符串。
  • toPrecision(precision):将数字转换为指定有效位数的字符串。
  • isNaN(value):检查一个值是否为 NaN(非数字)
  • isFinite(value):检查一个值是否是有限数。
  • parseInt(string, radix):将字符串解析为整数。
  • parseFloat(string):将字符串解析为浮点数。
  • Number()将其他类型数据转化成数值

24.字符串常用的方法

  • 不改变原字符串:trim、toLowerCase、toUpperCase、chartAt、includes、indexOf、lastIndexOf、search、match、startsWith、endsWith、silce、substr、substring、replace、replaceAll、concat、repeat、split。

25.函数常用的方法

  • call、apply、bind

25.对象常用的方法

  • 不改变原对象:Object.keys、Object.values、Object.entries、Object.isFrozen、obj.hasOwnProperty、key in obj
  • 改变原对象:Ovject.create、Object.assign、Object.freeze、Object.defineProperty、Object.defineProperties

26.数组常用的方法

  • 改变原数组:push、pop、unshift、shift、store、reverse、splice、fill;
  • 不改变原数组:at、includes、indexOf、lastIndexOf、slice、concat、flat(Infinity)、toString、join、some、every、find、findindex、forEach、Map、flatMap、filter、reduce、reduceRight

27.伪数组

  • 伪数组的特征
    • 具有length属性;
    • 按索引方式存储数据;
    • 不具有数组的方法.
  • 伪数组转数组的方法
    • Array.from()
    • Array.prototype.slice.call()
    • 展开运算符(...)
  • 常见的伪数组
    • new Set()
    • arguments
    • document.getElementsByClassName('div')

28.循环语句

  • while:while 语句只要指定条件为 true,就会执行循环
    • 参数1:必须。定义执行循环的条件
  • do/while:先执行一次代码块,再检查条件是否为真,为真就继续循环
    • 参数1:必须。定义执行循环的条件
  • for:可以指定代码块循环的次数
    • 参数1:可选,初始化的变量,也可以指定多个;
    • 参数2:可选,条件判断语句;
    • 参数3:可选,每次循环后执行的语句;
  • for/of:用于遍历数组
    • 参数1:必须。数组的元素。
    • 参数2:必须。指定遍历的数组。
  • for in:用于迭代对象或者数组
    • 参数1:必须。对象的键或数组的索引。
    • 参数2:必须。指定迭代的的对象或者数组。
  • forEach:遍历数组
    • 参数1:对数组元素执行的回调函数
    • 参数2:this指向
    • forEach没有返回值

29.forEach、for中断循环、跳出循环?

  • forEach:中断循环try/catch/throw;跳出当前循环return;
  • for:中断循环break;跳出当前循环continue;

30.for of为什么不可以遍历对象

       对象是不可迭代的。es6中引入了iterator接口,只有提供了iterator接口的数据类型才可以使用“for-of”来循环遍历;而普通对象默认没有提供iterator接口,因此无法用“for-of”来进行遍历。

31.字符串slice和substring的区别

  • 都可以从字符串中指定起止位置提取并返回一个新的字符串,且不修改原数组。
  • 两者第二个参数都可以省略(默认提取到字符串末尾)。
  • slice如果参数是负数,则表示从字符串的尾部开始计数,。
  • substring如果任一参数是负数,它会被视为0。

32.数组去重的方法有哪些

  • Array.from(new Set())
  • arr.filter((item, index) => arr.indexOf(item) === index);
  • arr.reduce((total, item) => (total?.includes(item) ? total : [...total, item]) , []);

33.数组拍平的方法有哪些

  • arr.flat(Infinity)
  • arr.toString().split(',').map((item) => Number(item));
  • arr.reduce((total, item) => (Array.isArray(item) ? [...total, ...flat(item)] : [...total, item]),[],);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java-spring-mvc(知识点讲解-第一天)-欢迎各位大佬提建议

目录 &#x1f383;MVC定义 &#x1f9e8;创建工程 &#x1f3a8;SpringMVC处理请求 请求分类及处理方式 静态请求 处理静态前端页面方式 动态请求 处理动态前端页面方式 ⚙小试牛刀 &#x1f3c6;常见问题 &#x1f4cc;HTTP协议 超文本传输协议 请求 &#x1f383;MVC…

Web前端开发 小实训(二) 简易计算器

实训目的 学生能够使用函数完成简易计算器编写 操作步骤 1、请将加减乘除四个方法生成为以下函数&#xff0c;且有返回值 中文英语加法add减法subtract乘法multi除法division次幂pow()平方根sqrt() 提示&#xff1a; 除法中的除数不能为0&#xff01; 参考代码&#xff1…

在线培训考试系统在线考试功能注意事项

在线培训考试系统在线考试功能注意事项 考试前务必注意是否开启防切屏、摄像头监考等防作弊措施&#xff0c;系统一旦检测到触发了疑似作弊行为会立刻自动交卷&#xff0c;考试终止&#xff1b; 答题者准备好后&#xff0c;可点击“开始答题”按钮进入考试&#xff0c;注意考…

代码随想录第49天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1_哔哩哔哩_bilibili 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一…

#C++里的引用#

目录 引用概念 定义引用类型 引用特性 常引用 传引用传参 传引用做返回值 1.引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a…

【AI】一文介绍索引增强生成RAG的原理和结构

今天向大家介绍一下关于RAG的一些知识和经验。 这里说的RAG可以理解为目前针对企业知识库问答等AI应用场景的解决方案,这个场景就是利用自然语言大模型LLM与用户自有的文件进行对话的能力。 【RAG的优势】 首先,讲一讲RAG的优势特征。 如果把AI想象成一个待上岗的人类助手,…

1、Flink DataStreamAPI 概述(上)

一、DataStream API 1、概述 1&#xff09;Flink程序剖析 1.Flink程序组成 a&#xff09;Flink程序基本组成 获取一个执行环境&#xff08;execution environment&#xff09;&#xff1b;加载/创建初始数据&#xff1b;指定数据相关的转换&#xff1b;指定计算结果的存储…

模型 AIPL(认知、兴趣、购买、忠诚)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。品牌营销的量化与链路化。 1 AIPL模型的应用 1.1 耐克如何利用AIPL模型来推广其运动鞋和服装产品? 耐克利用AIPL模型来推广其运动鞋和服装产品&#xff0c;具体如下&#xff1a; 认知&#xff08;…

为什么总说抖店做不好?做抖店需要注意这些问题,是不是都占了?

大家好&#xff0c;我是电商花花。 今天给大家总结了4个新手不注意又常犯的几个原因&#xff0c;这些建议都是我们做店这些年的实操经验&#xff0c;可以帮助大家做店自查&#xff0c;有责改之&#xff0c;无责加冕。 1、抖店核心是选品而不是玩法 很多新手在刚开始做店抖音小…

8K+/月!学习就业一把梭,祝贺誉天数通陈同学收获心仪offer !

大家好&#xff0c;我是誉天数通的陈同学。 在武汉&#xff0c;网络运维圈的人应该都会听过誉天的名字。作为华为的授权培训合作伙伴&#xff0c;誉天不仅提供专业全面的工程师培训&#xff0c;还以其独特的环境和氛围吸引着无数有志于在网络领域发展的朋友。 一年前的我&#…

用坐标与碰撞检测效果

用pygame碰撞检测子弹 与 子弹 格子检查是否在墙内 结果差不了多少 输出的是碰撞点坐标 在计算角色与强的距离是 你用了几条射线 2024/4/26 13:20:48 在代码中&#xff0c;用于计算角色与墙之间距离的部分是通过投射多条射线来实现的。具体来说&#xff0c;在循环中&#xf…

IDEA插件

POJO to JSON —— 实体转Json Smart Input —— 自动切换中英文 Translation —— 翻译 Maven Helper —— 依赖管理 .ignore —— 忽略提交文件 enum-quick-generate —— 枚举代码生成 粘贴到项目包下

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景&#xff1a;最近项目中又使用到了 jsonp 这一项跨域的技术&#xff0c;&#xff08;主要还是受同源策略影响&#xff09;&#xff0c;下面有为大家提供封装好的函数及对应使用示例&#xff0c;欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

基于车载点云数据的城市道路特征目标提取与三维重构

作者&#xff1a;邓宇彤&#xff0c;李峰&#xff0c;周思齐等 来源&#xff1a;《北京工业大学学报》 编辑&#xff1a;东岸因为一点人工一点智能公众号 基于车载点云数据的城市道路特征目标提取与三维重构本研究旨在弥补现有研究在处理复杂环境和大数据量上的不足&#xf…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…

系统盘空间不足调优方式1-APPData/大文件清理

作者&#xff1a;私语茶馆 1.前言 Windows系统盘&#xff08;C盘&#xff09;很容易剩余空间不足&#xff0c;这种情况下会非常影响Windows系统的运行&#xff0c;系统盘约束非常多&#xff0c;不方便在线扩容&#xff0c;因此规划和利用好系统盘是保障整体运行效率的关键。包…

机器人系统开发ros2-基础实践01-学会自定义一个机器人动作aciton实体类

您之前在了解操作教程中了解了action 。与其他通信类型及其各自的接口&#xff08;主题/消息和服务/srv&#xff09;一样&#xff0c;您也可以在包中自定义操作。本教程向您展示如何定义和构建可与您将在下一个教程中编写的action服务器和action 客户端一起使用的操作。 需要理…

Rust 实战练习 - 12. Axum Web 简单demo

Rust Web 历程 Rust 的异步框架tokio非他莫属&#xff0c;而web框架一直是悬而未决&#xff0c;说到底还是因为没有官方成熟的方案指引&#xff0c;大家各玩各的&#xff0c;互不兼容&#xff0c;白白浪费精力。 这个事情一直等到半官方组织tokio推出axum有了改善。但是市场上…

LeetCode455:分发饼干

题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个…

Orange3数据可视化(组件概览)

概要 大家见过Orange3提供的丰富数据可视化组件吗&#xff1f; Orange3为您提供了一系列生动的图表工具&#xff0c;包括树图、箱线图、小提琴图、分布图、散点图、折线图、条形图、筛图、马赛克图、自由投影、线性投影、雷达图、热力图、韦恩图、轮廓图、毕达哥拉斯树、毕达哥…
最新文章