目录
- 1、原始值和引用值类型及区别(堆和栈)?
- 2、判断数据类型?
- 3、类数组与数组的区别与转换?
- 4、数组的常见api?
- 5、bind call apply 区别?
- 6、new的原理?
- 7、this指向?
- 8、深拷贝和浅拷贝 ?
- 9、闭包及其作用 (个人理解)?
- 10、原型和原型链(很重要又难懂)?
- 11、prototype与__proto__的关系与区别?
- 12、继承的实现方式及比较?
- 13、防抖和节流
- 14、作用域和作用域链、执行期上下文
- 15、DOM常见的操作方式? BOM是什么?
- 16、Array.sort()方法与实现机制
- 17、Ajax的请求过程
- 18、JS的垃圾回收机制
- 19、JS中的String、Array和Math方法
- 20、addEventListener和onClick()的区别
- 21、new和Object.create的区别
- 22、DOM的location对象
- 23、浏览器输入URL渲染的整个流程
- 24、跨域
- 25、浏览器回流和重绘
- 26、argument
- 27、EventLoop事件循环
- 28、微任务,宏任务
- 29、BOM属性对象方法
- 30、 "== "和 "=== "区别
- 31、map,reduce,for,forEach
- 32、setTimeout用做倒计时为何会产生误差
- 33、函数柯里化及其通用封装
1、原始值和引用值类型及区别(堆和栈)?
可参考:https://www.cnblogs.com/clearyang/p/15735049.html
2、判断数据类型?
1.typeof:直接判断类型。需要注意typeof(null)为Object typeof(undefined)为null;
2.instanceof:用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上;
//例如:
function A (){}
var b = new A()
b instanceof A --> true
3.Object.prototype.toString.call(): 返回具体类型 加call是为了更改this指向
例如:
// '[object Object]' this 指向 Object.prototype,判断类型为 Object。
Object.prototype.toString([])
// '[object Array]' this 指向 [],判断类型为 Array
Object.prototype.toString.call([])
4.constructor: 返回对创建此对象的数组函数的引用
[可参考](https://www.cnblogs.com/lieaiwen/p/10219783.html)
3、类数组与数组的区别与转换?
都有下标和长度 类数组没有数组的方法
转换:Array.from() 扩展运算符(…) Array.prototype.slice.call()
4、数组的常见api?
find map splice( 删除、插入、替换) filter join concat slice
5、bind call apply 区别?
都是改变this指向
bind 返回一个函数可以延时调用
call 参数一个一个传递
apply 第二个参数以后可以用数组
6、new的原理?
创建一个对象;
将构造函数的this指向该对象;
执行构造函数的方法,使该对象继承构造函数的方法和属性;
返回该对象。
7、this指向?
谁调用指向谁
箭头函数的this指向上一行
8、深拷贝和浅拷贝 ?
浅拷贝拷贝栈
深拷贝拷贝堆
9、闭包及其作用 (个人理解)?
闭包函数返回函数
作用 访问函数内部的变量 连续调用不受影响
10、原型和原型链(很重要又难懂)?
可参照:https://blog.csdn.net/xiaoermingn/article/details/80745117
11、prototype与__proto__的关系与区别?
①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象
②所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
③所有引用类型的__proto__属性指向它构造函数的prototype
12、继承的实现方式及比较?
可参照: https://www.cnblogs.com/bonly-ge/p/12089014.html
这篇可能更好点:http://louiszhai.github.io/2015/12/15/prototypeChain/
13、防抖和节流
防抖点击后触发
节流时间段内触发
14、作用域和作用域链、执行期上下文
15、DOM常见的操作方式? BOM是什么?
https://blog.csdn.net/ZCZC946/article/details/80789934
16、Array.sort()方法与实现机制
https://blog.csdn.net/haotian1997/article/details/114835702
17、Ajax的请求过程
https://blog.csdn.net/qq_45494634/article/details/116640968
18、JS的垃圾回收机制
闭包中的内存泄漏只是低版本浏览器的垃圾回收机制有问题!!!
https://blog.csdn.net/weixin_53186633/article/details/121089016
19、JS中的String、Array和Math方法
https://www.cnblogs.com/lihuijuan/p/8490578.html
20、addEventListener和onClick()的区别
21、new和Object.create的区别
new Object()继承内置对象Object,而Object.create()则是继承指定对象;
可以通过Object.create(null) 创建一个干净的对象,也就是没有原型,而 new Object()创建的对象是 Object的实例,原型永远指向Object.prototype
参考文章
22、DOM的location对象
Location 对象实际上是 JavaScript 对象,而不是 HTML DOM 对象。
Location 对象是由 JavaScript runtime engine 自动创建的,包含有关当前 URL 的信息。
参考文章
23、浏览器输入URL渲染的整个流程
24、跨域
25、浏览器回流和重绘
回流改变dom树
重绘只改变颜色样式等
参考文章
26、argument
27、EventLoop事件循环
就是执行机制(可以简单理解为微任务,宏任务)
参考文章
28、微任务,宏任务
先宏任务后微任务最后执行定时器
29、BOM属性对象方法
1.window对象
2.location对象
3.history对象
参考文章
30、 "== "和 "=== "区别
"== “表示相等,”=== "表示严格相等。运算符会在进行相等比较之前先进行必要值的类型转换;而“===”运算符不会执行类型转换,因此如果两个值类型不同,那么比较时,直接返回false。
参考文章
31、map,reduce,for,forEach
forEach不能跳出循环可以用抛出错误的方法强行终止或者break / continue
参考文章(map,for,forEach)
参考文章
32、setTimeout用做倒计时为何会产生误差
setTimeout是一个异步的宏任务,当执行setTimeout时是将回调函数在指定的时间之后放入到宏任务队列。但如果此时主线程有很多同步代码在等待执行,或者微任务队列以及当前宏任务队列之前还有很多任务在排队等待执行,那么要等他们执行完成之后setTimeout的回调函数才会被执行,因此并不能保证在setTimeout中指定的时间立刻执行回调函数