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);