美文网首页
js 面试题总结

js 面试题总结

作者: jocode | 来源:发表于2019-12-31 08:18 被阅读0次

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

    相关文章

      网友评论

          本文标题:js 面试题总结

          本文链接:https://www.haomeiwen.com/subject/qizunctx.html