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面试题总结(全面)相关推荐

  1. 一道经典的JavaScript面试题

    一道经典的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227430.html

  2. 你应该知道的25道Javascript面试题

    题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...

  3. 互联网公司前端初级Javascript面试题

    互联网公司前端初级Javascript面试题 1.JavaScript是一门什么样的语言,它有哪些特点?(简述javascript语言的特点) JavaScript是一种基于对象(Object)和事件 ...

  4. (转载)7个去伪存真的JavaScript面试题

    7个去伪存真的JavaScript面试题 上周,我发表了<C#程序员的7个面试问题>.这次我要说的是如何淘汰那些滥竽充数的JavaScript程序员. 作者:小峰来源:码农网|2015-0 ...

  5. 一道隐藏欺诈的JavaScript面试题

    一道隐藏欺诈的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227426.html

  6. JavaScript面试题汇总

    JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...

  7. JavaScript 面试题汇总

    JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...

  8. JavaScript面试题111-120

    JavaScript面试题111-120 每日坚持学10道题 111. js数组去重(9种) [问答题] 用 JavaScript 脚本为 Array 对象添加一个去除重复项的方法. 来自:百度 参考 ...

  9. javascript面试题大全_Js基础面试题(附答案)

    近年来,从事web前端开发的程序员越来越多,都需要使用JavaScript,这篇文章主要整理一些最常见的javascript面试题以及答案. 介绍JavaScript的数据类型 值类型(基本类型):字 ...

  10. JavaScript面试题大全之基础面试题(附答案)

    近年来,从事web前端开发的程序员越来越多,都需要使用JavaScript,这篇文章主要整理一些最常见的JavaScript面试题以及答案. 介绍JavaScript的数据类型 值类型(基本类型):字 ...

最新文章

  1. 数组随机抽取 java_Java利用数组随机抽取幸运观众如何实现
  2. 博客园如何转载别人的文章
  3. python面试题及答案bt_公布上期Python笔试题答案,附带源码与运行结果
  4. mediasoup-demo 运行实战
  5. 前端学习(3312):redux的正确构建
  6. Java基础知识之循环语句(for循环、while循环)
  7. SWFUpload flash上传控件
  8. SVG.属性(各种)
  9. hadoop无法停止
  10. pandas 索引去重_pandas(一)
  11. 如何使用 JavaScript 快速构建一个二维码生成器
  12. Win10更新后BUG——任务栏点不动、卡死、加载不出来解决办法
  13. Systrace抓取
  14. 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
  15. SV学习(9)——随机函数、数组约束、随机控制
  16. 第3章 Linux内核调试手段之内核打印
  17. 小米云服务器怎么管理员密码,小米路由器管理密码怎么设置 小米路由器管理密码设置介绍【图文】...
  18. LevelDB 源码分析
  19. 用pyQt实现信号采集数据图形化显示
  20. 2.5D(伪3D)站点可视化第一弹

热门文章

  1. three.js动画(Animation)
  2. php curl status code,php curl 307错误
  3. destoon模板搜索时出现乱码
  4. 阿里视频云黄海宇:解析世界杯超大规模直播场景下的码率控制
  5. 高分子PEG磷酸盐mPEG-phosphoric acid,Phosphate PEG,甲氧基聚乙二醇磷酸,可用于修饰金属氧化物表面
  6. std中稳定排序算法_实战c++中的vector系列--使用sort算法对vector进行排序(对vector排序、使用稳定的排序std::stable_sort())...
  7. 4核处理器_解读三代锐龙3300X与3100:无核显,4核/8线程,十代i3瑟瑟发抖
  8. FileInputStream概述
  9. 疫情期间,公司降薪30%,你待不住了?
  10. C++抽象类详解--纯虚函数,抽象类