1、数据类型
- 原始数据类型
Number,String,Boolean,undefined,null - 引用类型
object、array、function
2、判断数据类型
- typeof 判断数据类型输出值
类型 | 输入值 | 结果 |
---|---|---|
Number | 2 | number |
String | '2' | string |
Boolean | false | boolean |
undefined | undefined | undefined |
null | null | object |
[] | [] | object |
{} | {} | object |
1、instanceof 运算符用来检测一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
2、可使用Object.prototype.toString.call()区分 null、[]、{}
tostring()
作用:其他类型转成 string 的方法
支持:number、boolean、string、object
不支持:null 、undefined检测数组
1、isArray()
2、对象的construct
3、instanceof
3、map用法
存储键值对,可快速查找
4、垃圾回收机制
参数值设为null,可进行垃圾回收。
var user={name:'lzy',age:'28'};
user=null; //垃圾回收
5、宏任务与微任务
宏任务
setTimeout、setInterval、整体代码script微任务
Promise.then、process.nextTick异步
setTimeout、setInterval、ajax、事件绑定等同步
除异步外的其他任务
执行顺序:
先同步再异步,先宏任务再微任务
//基础版
setTimeout(function(){
console.log('异步宏任务 2');
},0);
new Promise(function(resolve){
console.log('同步宏任务 3');
resolve();
}).then(function(){
console.log('同步微任务 4');
});
console.log('主线程宏任务 1');
//输出:3、1、4、2
//进阶版
console.log('主线程任务 1');
setTimeout(function(){
console.log('异步宏任务 4');
new Promise(function(resolve){
console.log('异步宏任务 5');
resolve();
}).then(function(){
console.log('异步微任务then 6');
});
},0);
new Promise(function(resolve){
console.log('同步任务 2');
resolve();
}).then(function(){
console.log('微任务then 3');
});
//主线程任务 1、同步任务 2、微任务then 3、异步宏任务 4、异步宏任务 5、异步微任务then 6
//第一轮:执行script下宏任务,先执行1,settimeout放入宏队列(暂不执行),执行promise 中2;本轮宏任务执行完毕,查找本轮是否有微任务,存在微任务then执行 3;
//第二轮:进行第二轮宏任务,取出队列中settimeout,继续执行宏任务
一个异步任务代码块中,会先执行完所有同步语句(包括宏任务和微任务),然后去执行整个代码中的同级别的异步任务
6、闭包
闭包作用:避免使用 全局变量
- 在函数体内创建另一个函数
- 通过闭包访问函数内部变量
- 可以让局部变量的值始终保存在内存中(通过fn=null 进行回收)
7、ES6新特性
- 箭头函数
- 展开运算符
- 类继承
- 增加let、const
8、解构赋值
-
模式匹配
-
省略
-
剩余参数
-
非数组解构
等号右边不是可遍历的解构,进行解构赋值报错;
-
set
9、 原型链与原型对象
- prototype
是函数才有的属性;
function Food(){}
Food.prototype.name = 'apple';
var e1=new Food();
console.log(e1.name);
//输出: apple
-
proto
除null外的对象都有该属性,指向该对象的原型;
function Food(){}
Food.prototype.name = 'apple';
var e1=new Food();
console.log(e1.__proto__ === Food.prototype);
//输出:true
- constructor
function Food(){}
Food.prototype.name = 'apple';
var e1=new Food();
console.log(Food === Food.prototype.constructor);
//输出:true
10、原生继承
- 原型链继承
- 构造函数继承
- 组合继承
- es6实现继承
11、改变this指向的几种方式
- bind
- call
- apply