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)设置监听事件,监测文档是否解析完毕,解