js 面试题总结
1.JavaScript概述(js是什么?)
JavaScript是一种基于对象的,事件驱动的,跨平台的,客户端脚本语言
基于对象、事件驱动、跨平台、客户端脚本、弱类型、解释性(编程)语言
2.运算符的优先级
()自增自减(单目)算数运算符关系运算符逻辑运算符三目运算赋值
3.js的三大结构
顺序结构条件结构循环结构
Case的穿透特性。
4. break、continue、return的区别
break多用于switch语句,防止case的穿透特性,执行完语句直接退出循环,不在向后执行。
continue只会退出本次循环,不执行后面代码,但循环会继续。
return用在函数返回值中,用了return退出函数,不执行后面代码,如果函数没有返回值是undefined。
5. 什么是作业域链
当访问一个变量时,先在当前作用域找,如果找不到时在向父级的作用域找,在找不到在向上级的作用域找,最后找到window如果没有这个变量时,程序报错。
6.函数的好处
1.函数实现一段功能的封装,增加了代码的复用性,一次封装多次使用;
2.函数让变量私有化,避免命名空间的污染;
3.通过参数的传递,可以实现功能的多元化;
7.什么是形参什么是实参
形参:函数声明时定义的形式参数,没有具体的值,用来传递参数。
实参:一个有具体的值的参数,可以理解为一个变量,做为参数传递时就叫实参
8.什么是函数的变量提升
当程序执行时会分为预解析和解析两个过程,在预解析的过程中会把所有的var声明和函数声明提升到当前作用域的最开头,进行一个声明不赋值的操作,如果是函数把整个函数提升到开头,如果是匿名函数赋值给了变量,提升的是变量,如果var声明和函数名冲突了,优先保留函数。
9.事件和函数的关系
事件三要素:
事件源,事件,事件处理程序
关系:事件依赖于函数实现
10.怎么访问对象
访问对象的两种方式:1.对象·键名直接调用。2.对象【“键”】调用
方法二注意,如果键是一个变量不用双引号,且如果键是只能方法二调用,如果是一个函数在【】后面还要加一个小括号。
11.改变数组的方法有那些
增:push加到最后、unshift加到最开头。返回的是改变的新数组的长度。
删:pop删除最后一个,shift删除第一个。返回的是删除的元素。
拷贝:splice(a,b,c)传0以上,0个参数拷贝数组,1个参数重下标位置开始拷贝,2个参数重a拷贝到b,3个以上参数从a拷贝到b并且把后面的数插入数组。返回新数组。
Reverse:数组倒序输出。
12.什么是堆什么是栈
栈:当变量声明时会在内存中开辟一片空间,如果是基本数据类型开辟的是栈空间,每声明一次开辟一次,一个变量等于另一个变量时又开辟了一片空间,一个值变另一个不会变,浏览器清除栈原则:先进后出即先声明最后清除。
堆:当声明的是引用数据类型时,开辟一个堆空间,变量存的是一个指向对应堆空间的地址,当多个变量重复声明时都值向一个堆,如果有一个变量的值变了,即堆空间中的值变了,所有指向这个地址的值都会变。
13.splice和concat的区别
Splice合并数组时,传入的值可以是数组,合并成二维数组,而concat传入的值如果是一个数组,会取出一个一个元素合并。
14.什么是内置对象,举例说明。
Js内部封装的可以直接调用的系统内部的对象就是内置对象,比如时间对象,数字对象。
15.什么是bom模型和dom模型
bom模型就是html在浏览器端运行生成的对象模型,子对象是window,window下的子对象是document、history、location、screen、navigator。
Dom模型其实就是html文档树,html由head、body组成。
16.什么是事件对象
对元素的某种操作就是事件,当触发事件时生成的对象就是事件对象,
17.attributes怎么用
Attribute可以设置自定义属性,也可以获取自定义的属性,也可以移除自定义的属性,getattribute获取的是一个对应属性的集合。Attributes获取的是对应节点的所有属性节点。
18.什么是事件
当某个事件执行时,从子元素向父元素触发或从父元素向子元素触发称为事件流,事件流分为:事件冒泡和事件捕获。
19.事件监听的好处
1. 可以为一个元素绑定多次同一个事件
2. 程序员可以使用事件监听方式确定触发的事件过程是冒泡还是捕获
20.委托的好处和缺点:
委托的机制:利用事件冒泡实现
优点:1.把某个事件加到父元素上,提高程序的执行效率
2.动态创建的元素,可以在创建元素的函数体外部为其添加事件
3.减少内存资源的消耗。
缺点:1.只触发target目标节点,其它子节点不触发
2.层级关系太远容易造成事件误判。
21.this的指向
一、自定义函数中:1.this指向window。
2.如果自定义函数在对象中,this指向直属对象。
3.如果在严格模式下,this是undefined。
二、事件绑定中,this指向事件源,即绑定这个事件的元素对象。
三、箭头函数中的this 来源于函数声明时所在的上下文环境(继承)
四、定时器中回调函数中的this指向window
五、this指向改变的方法: blind(),call(),apply()
blind可以在所有的匿名函数(不包括箭头函数)中使用
call和apply可以在非匿名函数和匿名函数后调用执行,但用于匿名函数时函数会立即执行。函数的实参会通过call的参数一个一个进行传参,
而apply会在第二个参数以数组的方式进行传参。
22.正则的量词有哪些
+:1个或多个。
*:0个或多个。
?:1个或0个。
{a,b}:a到b个。
23.什么是严格模式是什么,有哪些好处
严格模式就语法相对于严格的一种模式,把“use strict”放到程序的最开头就是严格模式的声明,声明后下面就是严格模式的作用域。
好处:1.代码更规范整洁,可读性高。
2.程序效率更高
24.let关键字的特点
1:不允许重复声明变量
2:作用域范围内没有变量提升,所以关键字上方为暂时性死区。
3:会生成块级作用域,故可以在for循环时声明私有化变量。
25.结构赋值的好处
1.可以一次性定义多个变量
2.可以让一个函数返回多个值
3.可以作用在函数的传参上,以对象的方式传递,可以无视参数的顺序但形参与对象的键名要一致。
4.可以轻松实现两个数的交换
26.什么是连缀调用
当一个对象调用多个方法的时候,把它们连接起来调用就是连缀调用。
27.怎么解决定时器私有问题
把定时器赋值给一个私有变量即可,比如对象.变量名,这个定时器就是私有的。
28.什么是对象和面向对象
对象是一个整体,具有属性和方法的事物,对象也可以动态添加属性和方法。
面向对象是一种高级的编程思想,是为了满足不同的人的不同需求的功能而产生的,这种思想就是把任何事物抽象成一个对象来对待,之后再对这个对象进行相关的操作,实现相关需求的编程思想就是面向对象,面向对象可以让复杂的编程简单化,面向对象具有封装、继承、多态的特点。
29.new做了哪些事
1.底层自动创建了一个对象
2.使得构造函数中的this指向了实例对象
3.在实例对象中产生一个__proto__指针(是一个属性),这个指针指向构造函数的原型对象。使得实例对象能够访问原型对象下的属性和方法。
30.怎么创建和调用原型对象
创建:1.用class创建类时,在内部直接创建的对象就是原型对象。
2.用new关键字对象时,在对象的prototype属性下创建的对象。
调用:只有在创建对象时内部可以直接调用,对象外部无法访问原型对象。
31.什么是实例属性
创建构造函数时实例化的属性就是实例属性
32.使用时间对象有哪些需要注意的
1.date.getYear是从1900年开始计算的。
2.获取的月是0-11月。
3.获取的星期是0-6.
4.获取的时间毫秒数是从1970年1月1日0时0分0秒开始计算
33.get和post的区别
1,参数传递的方式
get放在url
post放在请求体中
2,参数大小(由浏览器决定)
get后携带的参数大小,考虑浏览器的兼容性,一般在2k
post理论上没有限制,tomcat可修改
3,安全性post比get要高。
4,请求速度
get比post快
5,post请求时,要先设置一个请求头。get不需要
34.Ajax优缺点
缺点:
1.安全性不高
2.破坏了浏览器的机制
3.不利于浏览器搜索引擎的搜索
4.破坏了程序的异常机制,不利于程序维护
5.容易形成回调地狱,程序的可读性不高。
6.xhr不同的浏览器支持程序不同,所以在兼容性上有一定的不足。
优点:按需取数据,页面无刷新。减少带宽,降级开发成本。
请求速度快。提升用户体验。
35.如何实现跨域(偏后台)
jsonp
xhr2 : cors
服务器代理
iframe
document.domain
36.原型链
原型链:实例对象中会自动生成__proto__指针,这个指针指向构造函数的原型对象,构造函数的原型对象下还会有一个__proto__指向,这个指针指向父类的原型对象,各个指向间形成的链条关系。
37.Ajax原理
[if !supportLists]1. [endif]实例化一个实例化对象xhr = new XMLHttpRequest();
兼容ie6xhr = new ActiveXObject("Microsoft.XMLHTTP");
[if !supportLists]2. [endif]xhr.open(obj.method,obj.url);调用open传方法和地址
[if !supportLists]3. [endif]xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");如果是post请求要设置以上请求头
xhr.send(data);数据传data里
[if !supportLists]4. [endif]xhr.onreadystatechange
监听请求是否成功
38.Cookie的特点
1.cookie是保存在电脑硬盘上的一个文件,内容是一个字符串
2.Cookie是面向路径的。缺省路径 (path) 属性时,Web 服务器页会自动传递当前路径给浏览器,指定路径强制服务器使用设置的路径
3.在一个目录页面里设置的 Cookie 在另一个目录的页面里是看不到的
4.cookie存储数据不安全
5.cookie存储数据不能超过4kb 最多不能超过50条
39.关于ajax缓存问题
Ajax缓存问题是因为发送的请求地址一样时,会用本地缓存的数据,这时,我们要的是重新获取,解决方法,在地址后面跟一个时间戳
40.什么是闭包,优缺点
闭包的概念:
有权访问另一个函数中私有变量的函数,
1,函数套函数
2,一个函数访问了另一个函数中的变量
注意:一般是将一个函数作为另一个函数的返回值来执行
闭包的好处
变量私有化,避免命名空间的污染
可以访问其它函数的私有变量
闭包的缺点
耗费资源,有可能会造成内存溢出。
41.继承的几种方式
1.普通继承
2.call继承 : 目的是为了改变父类的this指向
3.apply继承 : 目的是为了改变父类的this指向
4.原型式(原型链):原理==将父类的实例对象赋值给子类的原型对象
5.组合继承
//原型式+call/apply
6.寄生组合继承。