当前位置: 首页 > Web前端 > JavaScript

前端面试js

时间:2023-03-27 00:59:31 JavaScript

1.js特点脚本语言:具有逻辑和行为能力解释性语言:需要js解析器解析执行弱类型语言:重复声明不报错,java是顺序执行的强类型语言从上到下(解析顺序就是执行顺序)区分大小写2、数据类型:(1)主要数据类型:string、boolean、number(2)复合数据类型:function、object(3)特殊类型:undefined,null3.数据类型:(1)6种不同的数据类型:string,number,boolean,object,function,symbol(2)3种对象类型:object,array,date(3)2种不包含任何值的数据类型:空,未定义4。使用typeof查看js变量的数据类型(1)nan的数据类型为number(2)array(数组)的数据类型为object(3)date(日期)的数据类型为object(4)thenull的datatypeisobject(5)定义的变量的数据类型是undefinedarray和date,不能用typeof判断它们的类型,因为返回的都是对象。使用instanceof判断一个对象的具体类型和使用instanceof判断类型只能在对象级别使用,不是一个对象就不行;instanceof是判断一个实例是否属于某种类型,更重要的是在继承关系中可以使用instanceof来判断一个实例是否属于其父类型6.数据类型转换(1)转换为字符串:转换为数字到字符串:全局方法String();toString()将布尔值转换为字符串:string()将日期转换为字符串:String();toString()(2)转换为数字:Number()可以将字符串、布尔值、日期转换为数字、包含数字的字符串转换为数字;空字符串为0;其他字符串转NaN(不是数字)"+"可以用来将变量转换成Number,如果变量不能转换,它仍然是一个数字,但是值为NaN(不是数字)getTime()也可以将日期转换为数字7.undefined和null的区别:undefined是未定的,null是变量初始化,但是没有值,只给了一个空对象;undefined等于空值,但类型不同8.==和===的区别:==:先转换为相同的数据类型然后比较===:先比较数据类型,如果数据类型不一致,直接返回false9.js组成:(1)ES5:核心js(2)DOM:文档对象模型(3)BOM:浏览器对象模型Eventflow(1)描述了从页面接收事件的顺序(2)事件捕获:从外到内(3)事件冒泡:从内到外11.事件绑定:(1)Dom0:eventtarget.ontype,unbindnull优点:兼容性好缺点:不能将同类型的多个事件绑定到同一个dom对象(2)dom2级事件:addEventListener(),unbindremoveEventListener();三个参数:事件类型,事件处理器,true/false对应捕获/冒泡优点:可以同时给一个元素绑定多个相同类型的事件缺点:兼容性差12.追加、删除、插入、删除方法替换节点:(1)appendChild()(2)removeChild()(3)insertBefore()(4)replaceChild()13.对象序列化和反序列化(1)JSON.pares();json字符串转对象(2)JSON.stringify();将对象转为json字符串14.作用域:从函数内到函数外逐层访问15.事件代理,解决方法:(1)新元素不能绑定事件(2)绑定应该绑定到事件上子元素的绑定到父元素16.闭包(1)函数内部的函数,函数外部的变量可以在函数内部引用,闭包使用的变量和参数不会被垃圾销毁集合机制(2)优点:是读取自身函数外的变量(沿作用域链查找),变量缓存,避免命名冲突(3)缺点:容易出现内存泄漏,使用过多会消耗内存17.如何实现继承:子类的原型指向父类例18.回调函数:(1)定义:一个函数也可以作为参数传递给另一个函数。这个作为参数的函数是一个回调函数。函数A有一个参数,这个参数就是一个函数B,函数A执行完之后,函数B执行,那么这个过程就叫做回调(2)优点:避免代码重复,增强代码可维护性和可读性;抽象的一般逻辑;事务是异步的(3)缺点:缺乏顺序,缺乏可信度19.原型,原型链,有什么特点:(1)js中每个函数都有一个原型对象属性prototype,所有函数的默认原型是一个instanceofobject(2)每个子函数继承父函数对象包含一个内部属性_proto_。该属性包含指向父函数原型的指针。如果父函数的原型对象的_proto_属性是下一层的函数,这个过程就形成了一个原型链(3)原型链实现了继承,原型链存在两个问题:a.包含值得原型属性的引用类型将由所有实例共享。b.创建子类型时,不能给超类型的构造函数传递参数20.json的理解:(1)json可以将js对象中表示的一组数据转换成字符串,函数之间传递this字符串,或者传递时异步应用程序中从web客户端到服务器端程序的字符串(2)js很容易理解(3)json可以表示比名称/值对更复杂的结构,可以表示数组和复杂对象,而不仅仅是简单的键值列表引用所指向的对象(2)深拷贝:不仅复制对象本身,还复制对象中包含的引用所指向的所有对象防抖:在一定时间内throttling:一定时间内,只执行一个taskobj的_proto_属性指向函数的原型(3)让函数的this指向obj,并且执行函数体函数n.call(obj);(4)判断函数返回值的内容:如果返回的是对象,则无操作,直到最后一次将对象赋值给变量(5)如果返回的是一个值,此时返回obj,然后直到最后的赋值操作24.js懒加载方式:(1)defer属性:告诉浏览器立即下载,但延迟执行,只适用于外部脚本文件(2)async属性:页面不等待脚本执行下载并执行,从而异步加载页面其他内容,但不保证脚本文件会按顺序执行(3)动态创建DOM(4)使用jquery的getScript()方法(5)使用setTimeout延时方法(6)让js最后加载,把从js外部导入的文件放在页面底部25.js的异步编程(1)回调函数:a.Nestedinlinefunction:ajax(url,callbackfunctionfunction(){})b.调用外部函数:ajax(url,callexternalfunctionfunction(){})(2)事件监听:给一个Event绑定一个函数,当事件触发时执行另一个函数(3)promisea.是一个可以获取异步操作信息的对象b.三种状态:pending//requesting;解决//成功;拒绝//失败c.基础用法:newPromise(function(resolve,reject){})d.then方法:then传入两个参数,第一个对应resolve的回调,第二个对应reject的回调e.catch方法:捕获promise错误的函数,同理在then函数参数中作为rejected函数,处理错误f.finally方法:不管成功失败都执行回调g.all方法:统一执行所有函数,只将成功的存入数组并返回然后进行回调输出。l.race方法:function先执行,callback先执行,不管成功还是失败,其余都不执行race的任何回调(4)asyncawait:async在function之前使用,并且function被编程为异步函数,返回值是一个promise对象await只能用在async声明的函数中(5)generators:generator,关键字yeild,可以多次yield(6)发布订阅:假设有一个“信号中心”,某个任务执行完后,会向信号中心“发布”一个信号,其他任务可以“订阅”信号中心,知道什么时候开始执行26.map和foreach的区别(1)map:会返回一个新的数组,所以回调中需要有返回值。如果不返回undefined(2)foreach:遍历和循环,默认有3个参数,数组内容项,数组索引index,当前遍历数组array27。基本数据类型和引用数据类型的区别:(1)基本数据类型:指简单的数据段,存放在栈内存中,占用空间小,大小固定(number/string/boolean/undefined/null)(2)reference数据类型:指由各个值组成的对象。它是存储在堆内存中的对象。占用空间大,大小不固定(对象/函数)