面试题
Javascript
1、JS由哪三部分组成?
1.ECMAScript:js的核心内容,并且描述了语言的基础语法,比如var、for循环、数据类型(数组,字符串)
2.文档对象模型 (DOM):DOM把整个HTML页面规划为元素构成的文档
3.浏览器对象模型 (BOM):对浏览器窗口进行访问和操作
2、JS有哪些内置对象?
String Boolean Number Array Object Function Math Date
常用:
Math
绝对值:abs() 、 最大值:max()、 最小值:min()
Date
new Date() getYear()
Array
String
concat() lenght() slice() split()
3、操作数组的方法有哪些?
push() pop() sort() splice() unshift() shift() concat() join() filter()
哪些方法会改变元数组?
push() pop() unshift() shift() sort() reverse() splice()
4、JS对数据类的监测方式有哪些?
typeof() instanceof() constructor() Object.prototype.toString.call()
5、说一下闭包,闭包有什么特点?
什么是闭包?函数嵌套函数,内部函数被外部函数返回并保存下来时,就会产生闭包
特点:可以重复利用变量,并且这个变量不会污染全局的一种机制:这个变量是一直保存在内存中,不会被垃圾回
收机制回收
缺点:闭包较多的时候,会消耗内存,导致页面的性能下降,在IE浏览器中才会导致内存泄露
使用场景:防抖,节流,函数嵌套函数避免全局污染的时候
6、前端的内存泄露怎么理解?
JS里已经分配内存地址的对象,但是由于长时间没有释放或者没办法清除,造成长期占用内存的现象,会让内存资源大幅浪费,最终导致运行速度慢,甚至崩溃的情况
垃圾回收机制
因素:一些未声明直接赋值的变量;一些未清空的定时器;过度的闭包;一些引用元素没有被清除
7、JS的事件委托是什么?
又叫事件代理,原理就是利用了事件冒泡的机制来实现,也就是说把子元素的事件绑定到了父元素身上,如果子元素阻止了事件冒泡,那么委托也就不成立
阻止事件冒泡:event.stopPropagation
addEventListener('click',函数名,true/false) 默认是false(事件冒泡), true(事件捕获)
好处:提高性能,减少事件的绑定,也就减少了内存的占用
8、基本数据类型和引用数据类型的区别?
基本数据类型:String 、Number、Boolean、Null、undefined、
基本数据类型保存在栈内存当中,保存的就是一个具体的值
引用数据类型(复杂数据类型):Object、Function、Array
保存在堆内存中,声明一个引用数据类型的变量,它保存的是引用数据类型的地址
假如声明两个引用类型同时指向了一个地址的时候,修改其中一个那么另一个也会改变
9、说一下原型链
原型就是一个普通对象,它是为构造函数的实例共享属性和方法,所有实例中引用的原型都是同一个对象,使用prototypee可以把方法挂在原型上,内存只保存一份
proto可以理解为指针,实例对象中的属性,指向了构造函数的原型(prototype)
一个实例对象在调用属性和方法的时候,会以此从实例本身,构造函数原型,原型的原型上去查找,查找的过程像是一个链条,所以叫原型链
10、new操作符具体做了什么?
1.先创建一个空对象
2.把空对象和构造函数通过原型链进行链接
3.把构造函数的this绑定到新的空对象身上
4.根据构造函数返回的类型判断,如果是值类型,则返回对象,如果是引用类型,则返回这个引用类型
11、JS是如何实现继承的?
1.原型链继承
2.借用构造函数继承