JavaScript面试题总结(全面)

本文整理了JavaScript面试中常见的问题,包括数据类型、数据检测、数组操作、对象特性和原型链等方面,深入探讨了JavaScript的基础知识和高级特性,如箭头函数、异步处理、闭包等,帮助读者准备JavaScript面试。
摘要由CSDN通过智能技术生成

1.js数据类型有哪些?两种类型的区别?

基本数据类型:String,Number,Boolean,Null,Undefined,Symbol

引用数据类型:Object,Array,Function,Data,Math,Map,Set,RegExp(正则表达式)

区别:两者的存放地址不同

基本数据类型存放在栈中,占用内存小,空间固定,且经常被使用。

引用数据类型存放在堆中,占用内存大,空间不固定;引用数据类型在栈中存放指针。指针指向堆中该实体

的起始地址。

2.数据类型的监测方法有哪些?

typeof 1 //number

1 instanceof Number //false,返回布尔值

Object.prototype.toString.call(1) //[object Number]

3.检测是否为数组?

arr instanceof Array //true

object.prototype.toString.call(arr) //[object Array]

console.log(Array.isArray(arr)) //true,ES6新增语法

if(arr.proto == Array.prototype) 判断一下,true

console.log(Array.prototype.isPrototypeOf(arr))//true,用Array原型上的方法

4.null和undefined的区别?

两个数据类型都是基本数据类型,并且都有一个值,null和undefined。

undefined的意思是未定义,比如说只是声明了一个变量但是为定义,那么就是undefined,

null是一个空对象。

5.isNaN和Number.isNaN的区别?

isNaN会尝试将传入的参数转换为数字,如果是非数字的参数传入,结果是true,会影响isNaN的判断。

Number.isNaN会先判断传入参数的类型是不是数字型的,然后再判断是否是NaN,结果比较准确。

6.object.assign()和(...)扩展运算符的区别?

首先两者都是浅拷贝

object.assign()的第一个参数是目标对象,后面的参数是源对象,这个方法会将目标对象和源对象进行合并,如果

目标对象和源对象中出现同一个键名的话,源对象中的值会覆盖掉目标对象中的值。

扩展运算符,会将多个数组进行合并,并且同样的值也不会被覆盖掉。

7.如何判断一个对象是一个空对象?

(1)利用JSON.stringify() 方法:

if(JSON.stringify(obj)=='{}') 如果为真的话就返回空对象

(2)object.keys(obj)方法:

if(object.keys(obj).length<=0) 如果为真就是空对象

8.let,const,var的区别?

let和const没有变量提升,具有块级作用域,

var具有变量提升,没有块级作用域,

let和var声明的变量可以进行修改。

9.const对象的属性可以修改么?

const命名一个对象,可以修改对象中的属性,因为修改对象中的属性并没有修改对象的地址。

10.箭头函数与普通函数的区别:

箭头函数比普通函数更加简洁。

箭头函数没有自己的this。

call(),apply(),bind()方法不能改变箭头函数中this的指向。

箭头函数不能当作构造函数使用。

箭头函数没有prototype,arguments属性。

11.箭头函数的this指向哪里?

箭头函数的this指向箭头函数所在位置的外层函数。

12.扩展运算符的作用以及应用场景

作用:可以取出参数对象中的所有可遍历属性,将其拷贝到当前对象中,属于浅拷贝。

比如数组扩展运算符:可以将参数转换成以逗号隔开的参数序列

13.对rest的理解:

作为函数形参,可以把分离的参数整合成一个数组

14.对JSON的理解:

JSON是一种数据交换格式,任何语言都可以读取并传递,JSON可以进行前后端数据的传递。

JSON.stringify():用于将js数据结构转换为JSON字符串

JSON.parse():用于将JSON字符串转换为js数据解构

15.Map和object的区别:

(1)同名碰撞:在Map中每一个键都是一个内存地址,如果键相同但值是不相同的,那么这就是两个不同的键。

在object中,如果键相同的话,那么内存地址就相同,那么这就是同一个键。

(2)键的类型:Map的键可以是任何的数据类型;object的键只能是字符串和Symbol类型

(3)键的顺序:Map的键是有顺序的,object的键没有顺序

(4)键的size:Map的size可以直接通过map.size()获得,object则不可以

(5)Map可以进行遍历,而object不可以进行遍历

16.Map和weakMap的区别:

两者都是键值对的形式,而Map的键可以是任何数据类型,weakMap的键原始数据类型不可以是,并且weakMap是弱引用。

17.js中有那些内置对象:

值属性:null,undefined

对象属性,函数,字符串,日期,JSON

18.JS脚本延时加载的方法:

(1)defer:给脚本添加defer属性,让脚本加载的同时也进行解析文档,这样不会阻碍到页面的渲染,并且多个添加defer属性的脚本会按照顺序来执行。

(2)async:给脚本添加async属性,让脚本进行异步加载,先下载js脚本,下载完脚本之后立即执行js,但是这样也有可能会导致文档没有加载完,会阻碍到页面的渲染。

(3)设置一个定时器,延缓js脚本的加载

(4)将js脚本写在文档的最后面

(5)设置监听事件,监测文档是否解析完毕,解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值