js 面试题总结

2019-12-31  本文已影响0人  jocode

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.寄生组合继承。

上一篇下一篇

猜你喜欢

热点阅读