js基础面试题总结

1.js数据类型有哪些?两种数据类型的区别?

1.基本数据类型:
     

数据类型

typeof 值

举例

String字符串

string

“abc”,'abc',`def`

Number数组

number

123,-12.5

Boolean布尔

boolean

true,false

undefined未定义

undefined

undefined

Symbol符号

symbol

symbol

null 空

object

null

2.引用类型:

数据类型

typeof

举例

Array数组

object

Object对象

object   

{}

function函数class类

function

function(){}

Map图

object

new Map([[]])

Set集合

object

new Set([])

weakMap,weakSet

object

Date,Math,

object

两者的区别;

1.区别不同

1.1:基本数据类型存放在栈中,占内存小

1.2:引用类型存放在堆中,占内存比较大

案例:


		var b = {
			age: 18
		};
		b instanceof Array //false  b不是数组的实例
		b instanceof Object //true  b 是对象的实例


		// constructor 构造函数
		a.constructor == Array //true
		a.constructor === Object //false

		b.constructor == Array //false
		b.constructor == Object //true

		//数组专用Array.isArray() 是否为数组

2.null和undefined的区别?

1. 两个数据都是基本数据类型,并且都有一个值,null和undefined。
2. undefined的意义是未定义,比如说只是声明了一个变量但是为定义,那么就是undefined。
3. null是一个空对象。

3.深拷贝与浅拷贝的区别?

1.js 拷贝一个对象。
2 浅拷贝,只拷贝值类型,引用类型数据还是指向地址。
3.浅拷贝(如果属性值是引用类型,;两个变量的属性都执行同一个)

案例:

 

深拷贝:

1.每一层都会进行拷贝。

2.利用JSON.stringify():先利用JSON.stringify()将js对象转化为字符串,再利用JSON.parse()方法将字符串还原为js对象赋值给一个新的对象,这样就完成了深拷贝。但是如果拷贝的对象当中有函数,undefined,Symbol的话,数据就会消失。
 

 4.let,const,var 的区别:

1.let和const没有变量提升,具有块级作用域.

2.var 具有变量提升,没有块级作用域.

3.let和var声明的变量可以进行修改

5.get与post的区别?

1.get可以 获取数据,而post不可以

2.get 有缓存的,可以收藏书签,方向,数据量2k

 3.post 没有缓存,理论上没有大小限制

6.箭头函数的this指向哪里?

箭头函数的this指向箭头函数所在位置的外层函数。

7.什么是BOM ,什么是DOM?

1.Dom指的是文档对象模型,一文档为对象,定义了网页内容的方法和接口。

2.BOM指的是浏览器对象模型,以浏览器为对象,定义了与浏览器进行交互的方法和接口.

8.什么是闭包?闭包的作用.闭包的缺点

1.闭包就是函数嵌套函数,函数作为参数被传入,作为返回值被返回。

作用:

1.形成局部作用域,

2.在函数外部可以访问函数内部的局部变量

缺点:

被闭包引用的变量不会被js垃圾回收机制销毁,会常驻内存,使用不当容易造成内存崩溃

9.递归?

1.递归就是函数自己调用函数。

案例:

10.对promise的理解?

1. Promise 实现异步操作,解决回调函数层级过多形成的回调地狱问题

2 .Promise resolve与reject状态发送改变不能更改

 3 .Promise.reject()

 4. Promise.all() 多个promise多完成才返回结果

5 . Promise.race() 多个promise执行返回最快的一个

Promise得三种状态:

1.Pending(进行中)

2.Resoolved:成功了

3.Rejected:失败了。

11.什么是原型,什么是原型链?

什么是类?什么是实例?

1.类:构造对象的一个模板 Array Object String。

2.实例:就是有类创建的对象 [1,2,3] {name:"lin"},"abc"。

3.本质上讲:类是个函数  实例是一个有函数创建的对象

原型:

1.每个构造函数 (class)都有一个显示原型prototype
 2.每个实例对象都有一个隐式原型__proto__
 3.类的prototype等于其实例的__proto__

原型链:

1.当查找对象一个属性是先在自身找,找不到则沿着__proto__的__proto__向上查找

2. 我们把__proto__的__proto__形成的关系成为原型链

3.

 s1通过__proto__原型链实现了对Student,People,Object的继承

作用:

1.原型链实现了js继承。

2.原型可以给构造函数创建的实例添加公用方法。

原型链案例:

 //01创建People类
	 function People(name,age){
		 this.name = name;
		 this.age=age;
	 }
	 //02 给people显示原型添加eat方法
	 People.prototype.eat=function(){
		 console.log(this.name+"正在敲代码")
	 }
	 //03创建学生类继承People类
	 function Student(name,age,no){
		 //执行People构造函数(执行people函数并把当前的this传入函数,当前peoplethis)
		 People.call(this,name,age);
		 //定义学号
		 this.no=no;
	 }
	 //04 让Studebt原型链继承people的原型链
	 Student.prototype=Object.create(People.prototype);
	 //05修正Student 显示原型上的构造函数
	 Student.prototype.constructor=Student;
	 //06在Student显示原型链添加方法
	 Student.prototype.study=function(){
		 console.log(this.name+"敲代码,dayday up");
	 }
	 //07 构建Student的实例 s1
	 var s1 = new Student("小沈阳",18,2356);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值