JavaScript面试题总结(全面)
1.js数据类型有哪些?两种类型的区别?
基本数据类型:String,Number,Boolean,Null,Undefined,Symbol
引用数据类型:Object,Array,Function,Data,Math,Map,Set,RegExp(正则表达式)
区别:两者的存放地址不同
基本数据类型存放在栈中,占用内存小,空间固定,且经常被使用。
引用数据类型存放在堆中,占用内存大,空间不固定;引用数据类型在栈中存放指针。指针指向堆中该实体
的起始地址。
2.数据类型的监测方法有哪些?
typeof 1 //number
1 instanceof Number //false,返回布尔值
Object.prototype.toString.call(1) //[object Number]
3.检测是否为数组?
arr instanceof Array //true
object.prototype.toString.call(arr) //[object Array]
console.log(Array.isArray(arr)) //true,ES6新增语法
if(arr.proto == Array.prototype) 判断一下,true
console.log(Array.prototype.isPrototypeOf(arr))//true,用Array原型上的方法
4.null和undefined的区别?
两个数据类型都是基本数据类型,并且都有一个值,null和undefined。
undefined的意思是未定义,比如说只是声明了一个变量但是为定义,那么就是undefined,
null是一个空对象。
5.isNaN和Number.isNaN的区别?
isNaN会尝试将传入的参数转换为数字,如果是非数字的参数传入,结果是true,会影响isNaN的判断。
Number.isNaN会先判断传入参数的类型是不是数字型的,然后再判断是否是NaN,结果比较准确。
6.object.assign()和(...)扩展运算符的区别?
首先两者都是浅拷贝。
object.assign()的第一个参数是目标对象,后面的参数是源对象,这个方法会将目标对象和源对象进行合并,如果
目标对象和源对象中出现同一个键名的话,源对象中的值会覆盖掉目标对象中的值。
扩展运算符,会将多个数组进行合并,并且同样的值也不会被覆盖掉。
7.如何判断一个对象是一个空对象?
(1)利用JSON.stringify() 方法:
if(JSON.stringify(obj)=='{}') 如果为真的话就返回空对象
(2)object.keys(obj)方法:
if(object.keys(obj).length<=0) 如果为真就是空对象
8.let,const,var的区别?
let和const没有变量提升,具有块级作用域,
var具有变量提升,没有块级作用域,
let和var声明的变量可以进行修改。
9.const对象的属性可以修改么?
const命名一个对象,可以修改对象中的属性,因为修改对象中的属性并没有修改对象的地址。
10.箭头函数与普通函数的区别:
箭头函数比普通函数更加简洁。
箭头函数没有自己的this。
call(),apply(),bind()方法不能改变箭头函数中this的指向。
箭头函数不能当作构造函数使用。
箭头函数没有prototype,arguments属性。
11.箭头函数的this指向哪里?
箭头函数的this指向箭头函数所在位置的外层函数。
12.扩展运算符的作用以及应用场景
作用:可以取出参数对象中的所有可遍历属性,将其拷贝到当前对象中,属于浅拷贝。
比如数组扩展运算符:可以将参数转换成以逗号隔开的参数序列
13.对rest的理解:
作为函数形参,可以把分离的参数整合成一个数组
14.对JSON的理解:
JSON是一种数据交换格式,任何语言都可以读取并传递,JSON可以进行前后端数据的传递。
JSON.stringify():用于将js数据结构转换为JSON字符串
JSON.parse():用于将JSON字符串转换为js数据解构
15.Map和object的区别:
(1)同名碰撞:在Map中每一个键都是一个内存地址,如果键相同但值是不相同的,那么这就是两个不同的键。
在object中,如果键相同的话,那么内存地址就相同,那么这就是同一个键。
(2)键的类型:Map的键可以是任何的数据类型;object的键只能是字符串和Symbol类型
(3)键的顺序:Map的键是有顺序的,object的键没有顺序
(4)键的size:Map的size可以直接通过map.size()获得,object则不可以
(5)Map可以进行遍历,而object不可以进行遍历
16.Map和weakMap的区别:
两者都是键值对的形式,而Map的键可以是任何数据类型,weakMap的键原始数据类型不可以是,并且weakMap是弱引用。
17.js中有那些内置对象:
值属性:null,undefined
对象属性,函数,字符串,日期,JSON
18.JS脚本延时加载的方法:
(1)defer:给脚本添加defer属性,让脚本加载的同时也进行解析文档,这样不会阻碍到页面的渲染,并且多个添加defer属性的脚本会按照顺序来执行。
(2)async:给脚本添加async属性,让脚本进行异步加载,先下载js脚本,下载完脚本之后立即执行js,但是这样也有可能会导致文档没有加载完,会阻碍到页面的渲染。
(3)设置一个定时器,延缓js脚本的加载
(4)将js脚本写在文档的最后面
(5)设置监听事件,监测文档是否解析完毕,解析完毕动态引入脚本
19.javascript中类数组的定义:
类数组对象拥有length属性,和若干索引属性。但是不能使用数组的方法,常见的类数组对象有arguments和操作DOM所返回的结果,一个函数也可成为类数组。
20.将一个类数组(arrlike)转换成一个真正的数组方法:
(1)使用数组的slice()方法,不会修改原数组
Array.prototype.slice(arrlike)
(2)使用数组的splice()方法,对数组进行替换或者修改,修改了原数组
Array.prototype.splice(arrlike)
(3)使用数组的concat()方法,用于合并数组,不会修改原数组
Array.prototype.concat(arrlike)
(4)使用Array.from()方法:
Array.from(arrlike)
(5)使用扩展运算符(...): (...arguments)
21.数组原生的方法:
数组转换为字符串:toString(),tolocalString(),join()
末尾操作:pop()删除最后一个元素,push()在末尾增加一个元素
首位操作:shift()删除第一个元素,unshift()在守卫增加一个元素
重排序和翻转数组:resverse(),sort()
合并数组:concat()
数组截取(浅拷贝)方法:slice(),不会改变原数组
数组修改:splice(),改变了原数组
数组归并方法:reduce()
22.为什么arguments是一个类数组?用什么方法遍历类数组?
因为arguments是一个对象,他的属性是从0依次增大的数字,并且不能使用数组的方法,所以它是一个类数组。
(1)用call()或apply()方法先将类数组转换成真正的数组
Array.prototype.forEach.call(arguments,a=>console.log(a))
(2)用Array.from()方法将数组转换成真正的数组
const arr = Array.from(arguments);
arr.forEach()
(3)利用扩展运算符转换为真数组
[...arguments].forEach()
23.什么是BOM,什么是DOM
DOM指的是文档对象模型,以文档为对象,定义了网页内容的方法和接口。
BOM指的是浏览器对象模型,以浏览器为对象,定义了与浏览器进行交互的方法和接口。
24.对Ajax的理解,怎么实现一个Ajax请求?
Ajax指的是通过javascript的异步通信,从服务器获取XML文档并从中提取数据,再更新当前网页的对应部分,不会刷新整个网页。
(1)第一步创建一个XMLHttpRequest对象
const xhr = new XMLHttpRequest();
(2)初始化对象,在这个对象上使用.open()方法,设置请求方式和请求地址,是否异步
xhr.open('GET','http://127.0.0.1:8000/server',true);
(3)再发起请求前可以设置一些信息,比如说请求头
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('name', 'atguigu');
(4)设置状态监听函数
(5)发起请求,用.send()方法:xhr.send()
25.ajax,axios,fetch的区别:
ajax通过javascript的异步通信,通过服务器获取XML文档从中提取数据,再更新当前网页的相应部分,不会刷新整个网页。
axios是通过Promise实现ajax技术的一种封装,而fetch与ajax平级。
fetch是ES6提出来的,是ajax的替代品,基于promise设计的,比之ajax代码更加简洁,没有用到XMLHttpRequest对象,使用原生js。
26.JavaScript中为什么要变量提升,导致了什么问题?
在预解析和预编译的过程中,变量提升有助于提升性能,在函数执行时预先为变量分配栈空间。
增加了代码的容错性,让一些不规范的代码可以正常执行。
导致了什么问题:坑会导致输出为undefined
27.CommonJS和和ES6模块的异同:
不同点:
(1)CommonJs是编译的时候同步加载,而ES6则是异步的
(2)CommonJs的require()方法同步加载,ES6的import异步
(3)CommonJS是对模块的浅拷贝,而ES6是对模块的引入,是只能够只存只读的,因为ES6模块的指针方向不能改变,所以不能修改
相同点:ConmmonJS模块和ES6模块对其引入的对象可以修改对象中的属性。
28.use strict是什么意思 ? 使用它区别是什么?
概念:在ES5中提出,让JavaScript在更加严格的模式下运行
目的:让js语法更加合理规范;js运行环境会更加安全;增加编译器效率,运行速度更快;为新版本js做铺垫
内容:禁止使用with语句,禁止this指向全局变量,对象不能有重名的属性
29.for...in...和for...of...的区别:
for...in...只适合遍历对象,不适合遍历数组。for...in..在遍历对象的时候,会便利对象额整个原型链,性能比较差,。而for...of在遍历对象的时候只会遍历当前对象。
for..in在遍历数组的时候只会遍历数组身上所有可枚举的属性,同时也会遍历原型链上的可枚举属性。而for...of只会返回数组下标的属性值。
30.如何使用for...of...来遍历对象?
for...of是ES6新增的遍历方法,允许遍历一个拥有iterator的数据结构(数组,类数组对象,Map,Set)。
如果对象是普通对象,那么不能使用for...of进行遍历,否则就会报错。
如果是类数组对象,先转换为真数组,然后再用for...of进行遍历,如果不是类数组对象,也不是普通对象,那么给对象增加一个[Symbol.iterator]属性,并指向一个迭代器即可遍历。
31.forEach和map的区别:
forEach方法,数组中的每一个元素都会执行提供的函数,会改变原数组,没有返回值。
map方法,会返回一个新数组,不会改变原数组,新数组里面的值是原数组中的元素执行提供函数所返回的值。
32.如何实现深拷贝?
深拷贝:每一层都会进行拷贝。
(1)利用JSON.stringify():先利用JSON.stringify()将js对象转化为字符串,再利用JSON.parse()方法将字符串还原为js对象赋值给一个新的对象,这样就完成了深拷贝。但是如果拷贝的对象当中有函数,undefined,Symbol的话,数据就会消失。
(2)利用函数库lodash里的_.cloneDeep()方法进行深拷贝
(3)手写深拷贝函数 //封装函数
function deepCopy(newObj,obj) {
for(var key in obj) {
//判断属性值属于哪种数据类型
//属性值 obj[key]
//1.判断这个值是否为数组(数组也属于特殊对象,也是引用类型数据)
if(obj[key] instanceof Array) {
newObj[key] = []
deepCopy(newObj[key],obj[key]) //运用递归,把原对象属性值给新对象
//判断这个值是否为对象
} else if(obj[key] instanceof Object) {
newObj[key] = {}
deepCopy(newObj[key],obj[key]) //运用递归,把原对象属性值给新对象
} else {
//若是普通数据类型
newObj[key] = obj[key]
}
34.如何实现浅拷贝?
浅拷贝:只拷贝一层,更深层次级别的级别只拷贝地址
(1)Object.assign()方法:有两个参数,第一个参数是目标对象,第二个是源对象。
(2)利用扩展运算符进行拷贝
35.对原型和原型链的理解:
原型对象:每当新对象创建的时候,除了各自的属性以外,还有一个隐式的proto属性被创建,这个属性会指向各自的原型对象,而这个原型对象也有一个proto属性,这个属性会指向原型对象,最终会指向object。
function Father(name){
this.name=name;
}
const Son = new Father('Tom');
JavaScript New一个对象的过程:
1:创建一个新对象Son
2:新对象身上的内置属性proto指向Father的原型对象,即: Son.__proto__=Father.prototype
3:新对象会和函数的this绑定起来,即:Father.call(Son,'Tom');
4:执行函数体 Son.name= 'Tom';
5.如果没有返回值,那么就会返回这个新对象。
原型:任何JavaScript对象,都有一个proto属性指向它的构造函数的prototype
原型链:存在JS的继承机制,当你找一个对象的属性的时候,首先会在对象的身上寻找,如果没有找到的话,会顺着proto去对象的原型对象身上寻找,一直找下去,这就是原型链。
36.原型的修改和重写各有什么影响?
原型修改:并没有改变构造函数内部原型对象身上的constructor指向,只是在原型对象身上新增了属性或者方法。
原型重写:改变了构造函数内部原型对象身上的constructor指向,若仍向指向原来的构造函数,那么需要在修改的原型对象内部将constructor属性重新指向原来的构造函数
37.原型链的最终指向是?怎么打印原型链的终点?
原型链的最终指向是Object.prototype.proto ==null,所以原型链最终指向null.
38.如何获取对象非原型链的属性?
使用hasOwnProperty()方法判断属性(键)是否是原型链上的属性(键)
if(objhasOwnProperty(key))
39.Event loop(JS执行机制)
(1)先执行执行栈中的同步任务
(2)异步任务放到任务队列里等待读取
(3)一旦执行栈中的同步任务执行完毕,会一次取任务队列中的异步任务执行,这样异步任务就结束了等待状态,开始执行。
40.回调函数是什么?回调函数的缺点?如何解决回调地狱问题?
回调函数是可以作为变量传递给另一个函数的函数,等主题函数执行完再执行。
回调函数特点:是自己定义的;没有调用回调函数,但是最终回调函数执行了
回调函数缺点:异步函数层层嵌套就会产生回调地狱;回调函数耦合度很高,一旦改动,就会牵一发而动全身;很难处理错误;不能使用try/catch捕获错误;不能直接return。
如何解决回调地狱问题:Promise;async/await;
常见的回调函数:DOM事件回调函数;定时器回调函数;ajax请求回调函数;生命周期回调函数。
41.对Promise的理解?
Promise本身是同步的立即执行函数,当在executor中执行resolve()或者reject()的时候,是异步操作,也就是说Promise函数内部的函数体中的非异步任务按照正常顺序执行,resolve()和reject()的返回结果就作为Promise函数的返回结果,这个结果后面的then或catch需要,那么then和catch是需要放到任务队列中等待执行的(如果有定时器,就按照定时器顺序执行)。
Promise是一个对象,从语法上讲,可以获取异步操作消息,避免回调地狱。简单来说,Promise是一个容器,里面存放某个未来才结束的事件(异步事件)的结果。
42.Promise解决了什么问题?
比如说现在要发a,b,c三个请求,并且c请求依赖b请求的成功,b请求依赖a请求的成功,那么这样就出现了Ajax请求的层层嵌套,出现了地狱回调。那么使用Promise就可以解决这个问题
43.Promise有三个状态:
(1)Pending(进行中) (2)Resolved(成功了) (3)Rejected(失败了)
44.Promise有两个过程:(一旦状态从进行状态编程其他状态就不能改变了)
(1)Pending=>fullfilled=Resolved(已完成)
(2)Pending=>rejected=Rejected(失败了)
45.Promise的特点:
(1)Promise的状态不受外界所影响。函数内部的异步操作返回的结果才会决定当前的状态。
(2)Promise的状态一旦改变就无法更改。
46.Promise的缺点:
(1)Promise对象一旦创建就会立即执行,无法中途取消。
(2)如果Promise对象中没有回调函数,Promise中的错误就无法反映到外部。
(3)当处于pengding状态的时候,就不能确定当前进展到哪一阶段。
47.Promise总结:
Promise是一种解决异步编程的解决方案,Primise是一个构造函数,可以接收一个函数作为参数,并返回一个Promise实例。Promise实例有三种状态:pending(惊醒中),Resolved(以完成),Rejected(以失败)。Promise实例的状态只能由pending转换为Resolved或Rejected,并且状态一旦改变就不能再惊醒更改了。Promise的状态取决于resolve()和reject()两个函数的返回结果。Promise的原型身上有一个then()方法,可以为两个状态注册回调函数,这个回调函数属于微任务,会在本轮循环事件的末尾执行。
46.异步编程的实现方式:
(1)回调函数方式:但是容易造成回调地狱
(2)Promise方式:可以将嵌套的回调函数作为来链式调用,但是有可能会造成then()方法的链式调用,导致代码语义不明确。
(3)async函数:是generator函数和Promise共同实现的,当遇到await语句时,如果await语句的返回值是一个Promise对象,那么await就会等待Promise对象的状态转变为Reslved的时候再向下执行。因此可以将异步逻辑转换为同步顺序来执行,并且会自动执行。
(4)生成器generator实现异步转为同步。
48.Promise的基本用法:
创建Promise对象:
(1)new Promise方法:const promise = new Promise(function(resolve,reject){
if(异步操作成功){
resolve(value);
}else{
reject(error);
}
})
(2)快捷创建成功实例:Promise.resolve(11).then(function(value){
console.log(value);//11,将resolve的结果作为then的参数
})
(3)快捷创建失败的实例:Promise.reject(error).catch(function(value){
console.log(value);//error
})
49.Promise的方法:
(1)then()方法:
可以接收两个回调函数作为参数,第一个回调函数当Promise对象的状态变为Resolved的时候调用,第二个回调函数当Promise对象的状态变为Rejected的时候调用。第二个参数可以省略。then()方法返回的是一个新的Promise实例,因此可以使用then()的链式调用。
(2)catch()方法:
可以接收一个回调函数作为参数,当Promise对象的状态变为rejected的时候调用,相当于then()方法的第二个回调函数。
(3)all()方法:
可以接收一个数组作为参数,数组中的每一个元素都是一个Promise对象,只有当数组中的每一个Promise对象的状态都变为Resolved的时候,all()的状态才会变为Resolved。只要有一个Promise对象的状态是Rejected,all()的状态就是Rejected。
当所有的子Promise对象执行完,all()的状态为resolved的时候,返回值是一个数组,数组按顺序输出每一个Promise对象resolve()的返回值。当有任何一个Promise失败,返回值就是第一个失败的Promise对象的结果。
(4)race()方法:
race()方法和all()方法一样,接受的是一个数组,数组里面的元素都是Promise对象,与all()不同的是,根据子Promise对象第一个返回的状态来决定race()方法的状态。如果第一个Promise的状态变成了resolved,那么race()自身的转台就变成了resolved,反之则是rejected
(5)finally()方法:
不管最后的状态是什么,都要执行finally()方法。
50.Promise.all()和Promise.race()使用的场景区别:
Promise.all()方法,如果接收的数组中的Promise对象都返回成功的话,那么返回的值也是一个数组,并且按照顺序排列。使用场景:当需要发多个请求并根据请求顺序来获取并使用数据的时候,就可以用Promise.all()方法。
Promise.race()方法,比的是数组中哪一个Promise对象执行的快,谁快就返回谁的值,不管结果本身的状态成功与否。使用场景:当做一件事时,超过这个时间就不做了,就使用Promise.race()方法:
Promise.race([promise1,timeOutPromise(5000)]).then(res=>{})
51.对async和await的理解:
(1)async用来声明这个函数是异步函数,await用来等待异步方法执行完成。
(2)async返回的是一个Promise对象,async能完成的任务then()都能完成,async就是对then()链的优化,因为async返回的是一个Promise对象,所以在最外层不能用await来接收返回值,可以用then()来获取。
52.await等待的什么东西:
await等待的是异步函数的返回值。
(1)如果await等待的不是Promise对象,那么await等待的就是异步函数执行的返回值
(2)如果await等待的是Promise对象,那么await会等待Promise对象的状态变为Resolved再接着向下执行。
53.async和await的优势:
(1)Promise能够解决回调函数的层层嵌套问题,但是then()链阅读起来会增加额外负担,而async和await就非常明确,更加优雅。
(2)Promise传递中间值非常麻烦,而async和await代码几乎上是同步的,非常优雅。
(3)Promise很难不哦去到错误,而async和await能够使用成熟的try..catch进行捕获错误。
(4)Promise代码很难进行调试,而async的调试很好
54.async和await如何捕获错误?
利用try...catch来捕获错误。
55.setTimeOut,Promise,async/await的区别:
(1)setTimeOut是定时器,是异步任务在任务队列中,需要等页面中所有的同步任务执行完毕之后再执行
(2)Promise是同步立即执行函数,先执行函数内部的非异步任务,再执行Promise之外的同步任务(按照代码的先后顺序执行),Promise中的then()是异步任务放到任务队列中,定时器也是异步任务,执行完同步任务之后接着执行任务队列中的异步任务(按照代码的先后顺序执行)。
(3)async/await返回的也是Promise对象,调用立即执行,若有异步任务并且异步任务前面有await的时候,需要等待Promise的状态成功时才能往下执行,那么就先执行async函数下面的代码,等到await有返回结果时在执行await语句下面的代码。
56.并发和并行的概念:
并发是宏观概念,在同一时刻只能有一条指令执行,它会快速的轮换执行。
并行是微观概念,在同一时刻,有多个任务在多个处理器上同时执行。
57.对闭包的理解:
闭包就是指有权访问另一个函数作用域中变量的函数。创建闭包最常见的方式就是在一个函数中创建另一个函数,创建的函数可以 访问当前函数中的变量。
58.对作用域和作用域链的理解:
作用域:
(1)全局作用域:
在最外面函数和最外面函数外层声明的变量可以称为全局变量。
被定义但是没有被声明的变量也被称为全局变量。
window身上的属性也被称为全局变量。
(2)局部作用域:
一般在函数内部声明的变量被称为局部变量,局部作用域是分层级的,内层的可以访问外层的,反之则不行。
(3)块级作用域:
ES6新增的let和const关键字,可以生命块级作用域,一般在一个代码块中使用。
let和const声明的变量没有变量提升,不可以被重复声明。
块级作用域一般在循环中使用,可以把循环的变量限制在循环内部。
作用域链:
在当前作用域里查找变量,如果查找不到的话就到父级作用域查找,还查找不到的话就依次向上一级作用域查找变量,知道查找到window身上即可,这一层层的关系就叫做作用域链。
59.对执行上下文的理解:
在执行JS代码之前,需要先解析代码,解析代码的过程中会先创建全局执行上下文环境,先把要用到的变量和函数提取出来,变量声明为undefined,函数声明为可使用。这一步执行完了才开始真正的执行程序。
在函数执行之前也会创建一个执行上下文环境,跟全局上下文相似,只不过比全局上下文多了arguments,this和函数的参数
全局执行上下文:变量定义,函数声明
函数执行上下文:变量定义,函数声明,this,arguments,函数的参数
60.如何理解面向对象?
面向对象是以对象为核心,对象是类的实例化。
面向对象的特性:
封装性:对一个对象的属性和及其行为的程序代码封装到一个代码块中,也就是封装到一个类中。
继承性:一个对象相对于另一个对象有某些独特的特点,能力进行复制和延续。比如说Son类继承Father类。
多态性:不同的对象对于同一个信息产生不同的行为。
61.JS中如何创建一个对象?
(1)new Object()
(2)利用字面量创建:const obj = {}
(3)工厂模式:简单封装一个函数,能够进行简单的复用,缺点就是函数和对象没有建立联系。
(4)构造函数模式:封装一个构造函数,new 一个实例对象,实例对象的内置属性proto指向了构造函数的prototype
(5)原型模式:在构造函数的原型(prototype)身上添加共有的属性或者方法,new 一个实例对象
(6)构造函数+原型对象:在构造函数中定义属性,在原型身上添加方法,new 一个实例对象
(7)类:创建一个类,new 一个实例对象。
62.对象继承的方式有哪些?
(1)构造函数的继承(call/apply):call和apply可以改变某个函数的this指向,父类:Animal,子类:Cat,在子类构造函数中Animal.call(this)
(2)原型继承:子类原型=父类实例 Cat.prototype=new Animal()
(3)类继承:extends,super(可以继承父类构造函数) class Son extends Father{}
JavaScript面试题总结(全面)相关推荐
- 一道经典的JavaScript面试题
一道经典的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227430.html
- 你应该知道的25道Javascript面试题
题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...
- 互联网公司前端初级Javascript面试题
互联网公司前端初级Javascript面试题 1.JavaScript是一门什么样的语言,它有哪些特点?(简述javascript语言的特点) JavaScript是一种基于对象(Object)和事件 ...
- (转载)7个去伪存真的JavaScript面试题
7个去伪存真的JavaScript面试题 上周,我发表了<C#程序员的7个面试问题>.这次我要说的是如何淘汰那些滥竽充数的JavaScript程序员. 作者:小峰来源:码农网|2015-0 ...
- 一道隐藏欺诈的JavaScript面试题
一道隐藏欺诈的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227426.html
- JavaScript面试题汇总
JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...
- JavaScript 面试题汇总
JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...
- JavaScript面试题111-120
JavaScript面试题111-120 每日坚持学10道题 111. js数组去重(9种) [问答题] 用 JavaScript 脚本为 Array 对象添加一个去除重复项的方法. 来自:百度 参考 ...
- javascript面试题大全_Js基础面试题(附答案)
近年来,从事web前端开发的程序员越来越多,都需要使用JavaScript,这篇文章主要整理一些最常见的javascript面试题以及答案. 介绍JavaScript的数据类型 值类型(基本类型):字 ...
- JavaScript面试题大全之基础面试题(附答案)
近年来,从事web前端开发的程序员越来越多,都需要使用JavaScript,这篇文章主要整理一些最常见的JavaScript面试题以及答案. 介绍JavaScript的数据类型 值类型(基本类型):字 ...
最新文章
- 数组随机抽取 java_Java利用数组随机抽取幸运观众如何实现
- 博客园如何转载别人的文章
- python面试题及答案bt_公布上期Python笔试题答案,附带源码与运行结果
- mediasoup-demo 运行实战
- 前端学习(3312):redux的正确构建
- Java基础知识之循环语句(for循环、while循环)
- SWFUpload flash上传控件
- SVG.属性(各种)
- hadoop无法停止
- pandas 索引去重_pandas(一)
- 如何使用 JavaScript 快速构建一个二维码生成器
- Win10更新后BUG——任务栏点不动、卡死、加载不出来解决办法
- Systrace抓取
- 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
- SV学习(9)——随机函数、数组约束、随机控制
- 第3章 Linux内核调试手段之内核打印
- 小米云服务器怎么管理员密码,小米路由器管理密码怎么设置 小米路由器管理密码设置介绍【图文】...
- LevelDB 源码分析
- 用pyQt实现信号采集数据图形化显示
- 2.5D(伪3D)站点可视化第一弹
热门文章
- three.js动画(Animation)
- php curl status code,php curl 307错误
- destoon模板搜索时出现乱码
- 阿里视频云黄海宇:解析世界杯超大规模直播场景下的码率控制
- 高分子PEG磷酸盐mPEG-phosphoric acid,Phosphate PEG,甲氧基聚乙二醇磷酸,可用于修饰金属氧化物表面
- std中稳定排序算法_实战c++中的vector系列--使用sort算法对vector进行排序(对vector排序、使用稳定的排序std::stable_sort())...
- 4核处理器_解读三代锐龙3300X与3100:无核显,4核/8线程,十代i3瑟瑟发抖
- FileInputStream概述
- 疫情期间,公司降薪30%,你待不住了?
- C++抽象类详解--纯虚函数,抽象类