js的基本知识

4.1 Js有哪些数据类型?

基本数据类型: Undefined、Null、Boolean、Number、String、Symbol、BigInt。 引⽤数据类型:object,function,array

4.2 数据类型检测的⽅式有哪些?

然后判断数据类型的⽅法⼀般可以通过:typeof、instanceof、constructor、toString四种常⽤⽅法

4.4 谈谈你对作⽤域和作⽤域链的理解

作⽤域规定了变量能够被访问的 ‘范围’,离开了这个范围变量便不能被访问 作⽤域分为: 局部作⽤域 函数作⽤域 ---在函数⾥ 块级作⽤域 let/const 全局作⽤域 ---整个script标签⾥ 作⽤域链 嵌套关系的作⽤域串联起来形成了作⽤域链 作⽤:作⽤域链本质上是底层的变量的查找机制 函数被执⾏时,会优先查找当前函数作⽤域中的变量 如果当前作⽤域中查找不到会逐级向上查找⽗级作⽤域直到全局作⽤域

4.6 如何改变this指向

js中允许改变函数中this的指向,有3个⽅法可以动态指定普通函数中this的指向

call 使⽤call⽅法调⽤函数,同时指定被调⽤函数中this的指向

使⽤场景:Object.prototype.toString.call(数据) 检测数据类型

apply 使⽤apply⽅法调⽤函数,同时指定被调⽤函数中this的值

使⽤场景: 求数组的最⼤值/最⼩值

bind bind()⽅法不会调⽤函数,但是能改变函数内部this的指向

使⽤场景 不需要调⽤函数,但是⼜想改变函数内部this的指向

4.7 for...in和for...of的区别

for...in 循环主要是为了遍历对象⽽⽣,不适⽤于遍历数组;for...of 循环可以⽤来遍历数组、类数组对 象,字符串、Set、Map 以及 Generator 对象。

4.8 forEach和map⽅法有什么区别?

这⽅法都是⽤来遍历数组的,两者区别如下: forEach()⽅法会针对每⼀个元素执⾏提供的函数,如果遍历的元素是引⽤数据类型,则可以改变指 针指向的堆内存⾥的值,该⽅法没有返回值; map()⽅法返回⼀个新数组,新数组中的值为原数组调⽤函数处理之后的值,如果遍历的元素是引 ⽤数据类型,则可以改变指针指向的堆内存⾥的值

4.9 什么是深拷⻉,浅拷⻉以及如何实现 浅拷⻉

浅拷⻉,指的是创建新的数据,这个数据有着原始数据属性值的⼀份精确拷⻉ 如果属性是基本类型,拷⻉的就是基本类型的值。如果属性是引⽤类型,拷⻉的就是内存地址 即浅拷⻉是拷⻉⼀层,深层次的引⽤类型则共享内存地址

常⻅的浅拷⻉: Object.assign Object.create slice concat() 展开运算符

深拷⻉ 深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会 改变另⼀个对象的属性 常⻅的深拷⻉⽅式有: _.cloneDeep()。loadsh jQuery.extend() JSON.stringify() ⼿写循环递归

JSON.stringify深拷⻉的缺点 如果obj⾥⾯有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式,⽽ 不是对象的形式 如果obj⾥⾯有RegExp,则打印出来是空对象 如果对象中有函数或者undefined,则会直接被丢掉 如果json⾥有对象是由构造函数⽣成的,则会丢掉对象的constructon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值