Javascript高频面试题

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 1.JavaScript常见数据类型
    • null 和 undefind区别
    • symbol(ES6新增)、bigInt(ES10新增)
  • 2.JavaScript判断数据类型的方式
  • 3.== 和 === 区别,分别在什么情况使用?
  • 4.变量声明 var、let、const 的区别
  • 5.作用域
  • 6.作用域链
  • 7.垃圾回收机制
  • 8.闭包
    • 什么是闭包?闭包的作用?闭包引起的问题
  • 9.JS的变量提升
    • var声明的变量声明提升
  • 10.箭头函数
    • 箭头函数的特性
    • 箭头函数和普通函数的区别?
  • 11.构造函数
    • 实例化执行过程(构造函数加了new发生了什么事情)?
  • 12. JavaScript中创建对象的三种方式
  • 13. JavaScript内置引用类型(包装类型)
  • 14.字符串常用方法
  • 15.原型与原型链
    • 原型是什么?
    • 原型链是什么?
    • 小结
  • 16.调用函数
  • 17.递归函数
  • 18. 深浅拷贝
    • 常见拷贝方式:
    • 浅拷贝
    • 深拷贝
  • 深拷贝有几种实现方式?
  • 19.
  • 总结


前言

Javascript 常考面试题。


1.JavaScript常见数据类型

Alt

null 和 undefind区别

(1)使用 typeof 进行判断的时候,Null 类型化会返回 “object”,这是一个历史遗留的问题。
(2)当我们使用双等号()对两种类型的值进行比较时会返回 true,使用全等号(=)时会返回false
(3)与数字相加,undefind返回值为NaN,null返回值为数字。
如何安全获取undefind?void 0 来获得 undefined。

symbol(ES6新增)、bigInt(ES10新增)

(1)symbol作用: 主要用于创建一些唯一标识, 可作为对象的属性名使用, 可通过 Symbol(‘xxx’) 进行声明

(2)bigInt: 用于表示比 Number 大的数值 (-2^53 - 1 到 2^53 - 1), 它声明方式有两种:

  • 字面量形式, 通过在数字后面加 n 来进行表示: const bigint = 123n
  • 通过函数 BigInt 来声明: const
    bigint = BigInt(12312)
  • Symbol BigInt 都不是一个构造函数, 所以 new 关键词的方式来构建实例
  • 创建一个 BigInt 的时候, 参数必须为整数, 否则或报错

2.JavaScript判断数据类型的方式

  • typeof:检测任意变量的数据类型。用typeof检测arguments的类型,返回object。
  • instanceof:判断一个对象的具体类型
  • objict.prototype.toString.call()
  • constructor:引用数据类型

3.== 和 === 区别,分别在什么情况使用?

  • 等于操作符用( == ):如果操作数相等,则会返回 true;在比较中会先进行类型转换,再确定操作数是否相等
  • 全等操作符( === ):只有两个操作数在不转换的前提下相等才返回 true。即类型相同,值也需相同。
  • 区别:== 判断两边值是否相等(存在隐式转换),=== 判断两边值和数据类型是否完全相等。null 和 undefined 比较,相等操作符(==)为true,全等为false

4.变量声明 var、let、const 的区别

(1)var

  • 可以重复声明
  • 没有块作用域
  • 有变量提升

(2)let

  • 不能重复声明
  • 有块作用域
  • 没有有变量提升

(3)const(定义常量时不可被修改)

  • 不能重复声明
  • 有块作用域
  • 没有有变量提升

5.作用域

Alt
5.1 作用域(scope):变量起作用的区域
5.2 局部作用域:

  • 函数作用域:在函数内部声明的变量只能在函数内部被访问,函数外部无法访问。
  • 块作用域:Javascript中使用{ }包裹的代码称代码块,let、const 声明的变量(常量)会产生块作用域,var 不会产生块作用域。
    5.3 全局作用域:

6.作用域链

Alt

7.垃圾回收机制

Alt

8.闭包

什么是闭包?闭包的作用?闭包引起的问题

Alt

9.JS的变量提升

var声明的变量声明提升

Alt## 函数声明提升
Alt

10.箭头函数

箭头函数的特性

  • 编码更简洁
  • 函数作用域内没有自己的this。会从自己作用域链的上一层寻找this
  • 不可以使用new实例化构造函数
  • 箭头函数内部不可以使用arguments对象,该对象在函数体内不存在,若使用该对象用rest参数代替。
    常见使用场景:定义匿名函数、回调函数。

箭头函数和普通函数的区别?

  1. 函数作用域内没有自己的this,从定义它的上下文中继承
  2. 没有 prototype 属性,不能作为构造函数使用

11.构造函数

  1. 作用:初始化对象,快速创建多个类似对象,大写字母开头的函数。
  2. 通过new调用来创建自定义类型的实例对象。
  3. 构造函数内部不写return,返回新创建对象。

实例化执行过程(构造函数加了new发生了什么事情)?

  1. 创建新对象;
  2. 构造函数this指向新对象;
  3. 执行构造函数代码,修改this,添加新属性;
  4. 返回新对象。

12. JavaScript中创建对象的三种方式

  1. 对象字面量
const v = {name = '守灯者'
}
  1. new object
const v = new object ({name = '守灯者'
})
console.log(v)
  1. 构造函数创建对象

13. JavaScript内置引用类型(包装类型)

  • 引用类型:String、Number、Boolean、Date、RegExp等
  • 基本类型有专门的构造函数,叫基本类型的包装类型,如String类型是基本类型String的包装类型。

为什么字符串类型能够使用length?为什么有属性?

  • 在JS的底层把基本的数据类型包装成了复杂数据类型。

14.字符串常用方法

15.原型与原型链

原型是什么?

一个对象,称 prototype 为原型对象

作用:

  • 共享方法
  • 把不变的方法直接定义在 prototype 对象上
  • prototype:原型对象
  • proto:对象原型,暴露对象的 prototype 特性

原型链是什么?

通__proto__属性链接的多个原型对象
Alt

小结

  • 构造函数和原型对象里面的 this 指向 实例对象
  • 公共的属性写到构造函数里面
  • 公共的方法写到原型对象上面
  • 要确定一个对象是不是另一个对象的原型,可以使用 isPrototypeOf() 方法

16.调用函数

JavaScript中函数可以通过5种方式调用

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过 call() 或 apply() 方法简介调用
  • 通过 JavaScript 语言特性隐式调用

17.递归函数

18. 深浅拷贝

常见拷贝方式:

  • 拷贝对象 object assgin() / 展开运算符{ …obj }拷贝对象
  • 拷贝数组 array.prototype.concat 或 [ …arr ]

浅拷贝

  • 浅拷贝 ,拷贝对象之后,里面的属性值是简单数据类型,直接拷贝值。
  • 如果属性值是引用类型,则拷贝的是地址。

直接赋值和浅拷贝有什么区别?

  • 直接赋值,赋值的是地址,修改会影响原对象。浅拷贝是一层的,不会和原对象相互影响。

深拷贝

深拷贝,拷贝的是对象

深拷贝有几种实现方式?

  • 通过递归实现深拷贝
  • 通过 JSON.stringify() 实现
  • 通过JS库 lodash / cloneDeep() 实现

19.



总结

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

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

相关文章

[Application] The app delegate must implement the window property if ..... 错误

在xcode中新建ios项目后再真机上运行,会发现手机上一篇漆黑,仔细观察控制台会发现这样的提示: [Application] The app delegate must implement the window property if it wants to use a main storyboard. 大概意思是: app d…

【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地

SpringBoot整合Mybatis框架实现多数据源和动态数据源配置 Mybatis是什么SpringBoot整合Mybatis框架实现多数据源操作应用场景选择和配置Maven依赖禁掉DataSourceAutoConfiguration去除DataSourceAutoConfiguration定制化配置对应的数据源 配置主、从数据源主数据源从数据源配置…

Mybatis-plus介绍与入门

前言 MyBatis-Plus是在MyBatis基础上的一个增强工具库,旨在简化开发者的工作,提高开发效率,同时保留MyBatis的灵活性。使用 MyBatis-Plus 可以减少重复性的代码,简化常见的数据库操作 官方学习文档:MyBatis-Plus (bao…

添加E1000网卡进行测试,只有VMXNET3性能的四分之一

正文共:1444 字 14 图,预估阅读时间:2 分钟 我们前面介绍了VMware ESXi 6.7中的适配器类型性能(VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!),当时的配置项主要为E1000e和VMXN…

RK3568/RV1126/RV1109/RV1106 ISP调试方案

最近一直在做瑞芯微rv1126的开发,由于项目性质,与camera打的交道比较多,包括图像的采集,ISP处理,图像处理,H.264/H.265编解码等各个方面吧。学到了不少,在学习的过程中,也得到了不少…

2.electron之纯原生js/jquery的桌面应用程序(应用篇)

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

Linux查询指定时间点段日志Linux查询指定文件

Linux服务器高效查询日志查询文件 Ⅰ、常用几种日志查询语法Ⅱ、常用几种查询语法 Ⅰ、常用几种日志查询语法 #查询某日志前xx行日志 head -n 行数 日志文件名 #查询某日志后xx行日志 tail -n 行数 日志文件名 #查询固定时间点日志(前提是这个时间点确实有日志输出…

智慧工地人工智能信息管理平台源码,建筑工地管理平台源码

智慧工地云平台源码,微服务架构JavaSpring Cloud UniApp MySql 智慧工地是指以物联网、​移动互联网技术为基础,充分应用人工智能等信息技术,通过AI赋能建筑行业,对住建项目内人员、车辆、安全、设备、材料等进行智能化管理&#…

女生未来赋能计划“闪亮她未来”职业启蒙课程走进开江县

为女童未来赋能,”爱小丫闪亮她未来”职业启蒙系列活动经过前期对接与筹备,于2023年12月4日和7日,分别走进甘棠小学与灵岩小学,本次活动由开江县网格员社会工作服务中心“爱小丫女生未来赋能计划”项目志愿者讲师谭顺玲老师为两所…

解决ES伪慢查询

一、问题现象 服务现象 服务接口的TP99性能降低 ES现象 YGC:耗时极其不正常, 峰值200次,耗时7sFULL GC:不正常,次数为1但是频繁,STW 5s慢查询:存在慢查询5 二 解决过程 1、去除干扰因素 从现象上看应用是由于某种…

荣耀时刻丨2023AIoT新维奖揭晓,美格智能荣登企业榜·行业先锋榜

12月15日,由物联网智库、智次方研究院主办,广东省物联网协会、深圳市物联网协会协办,智次方承办的中国AIoT产业年会暨2024年智能产业前瞻洞察大典在深圳顺利举办。 会上公布了“2023AIoT新维奖”系列榜单评选结果,美格智能荣登20…

C# WPF上位机开发(crc校验)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转,我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样,它在数据…

国际教育-微积分试讲讲稿

Substitution for Integration-Notes换元积分法

【SpringBoot】之Mybatis=Plus集成及使用(入门级)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之Mybatis-Plus系列》。&#x1…

MySQL数据存储、索引记录

行格式(每行记录) 行格式(每行记录): 以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式。 InnoDB 存储引擎4种不同类型的 行格式 ,分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。组…

git 的使用

git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git(Git 安装与使用、Git 命令精讲、项目的推送与克隆)-CSDN博客 Git 常用操作(5&#xff…

SpringMVC上传下载文件解读

知识点 文件上传(File Upload): 创建一个控制器方法,使用 MultipartFile 参数来接收上传的文件。在 Spring 配置文件中配置一个 MultipartResolver,常用的实现类是 CommonsMultipartResolver。在 MultipartResolver …

laravel8模块化开发laravel-modules

laravel8模块化开发laravel-modules 在laravel目录下打开git输入两行命令 $ composer require nwidart/laravel-modules $ php artisan module:make Admin 这个Admin就是文件名

用Pyinstaller打包深度学习算法为独立的可执行程序

前言:随着深度学习算法的流行,在传统工业软件计算领域,传统算法逐渐被深度学习算法给代替,但由于基于python的深度学习算法十分依赖python环境以及例如Pytorch、Scikit-learning、Keras等机器学习库,将深度学习算法运用…

西南科技大学数字电子技术实验五(用计数器设计简单秒表)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结…