目录
一、JS数据类型篇
1、Js数据类型
- 基本类型(number、string、boolean、null、undefined、symbol)
- 引用类型(Array/Object/Function/Date等);
2、数据类型判断方法
- typeof:返回的数据类型有‘undefined’/'number'/'string'/'boolean'/'number'/'object'/'function' ;(例子:typeof ‘123’ ,结果为‘string’)
- instanceof :typeof中将null、array、object归为object;instanceof可以判断是否是某个具体类型;(例子:[1,2,3,4] instanceof Array,结果为true)
// 1、instanceof的用法
例子:[] isntanceof Array
// 2、 手写版
function _instanceof(L,R){
let R0 = R.prototype
L = L.__proto__
while(true){
if(L === null) return false
if(L.__proto__ === R0) return true
L = L.__proto__
}
}
- Object.prototype.toString.call(),可以直接返回某个对象的具体类型;(例子:Object.prototype.toString.call('1234') ,结果为 [object String])
- 其他:constructor、jquery.type等;
3、深浅拷贝
- 基本类型和引用类型的区别:前者是按值访问,存储在栈中;后者是按引用访问,指针存放在栈,数据存放在堆中;深浅拷贝是(只针对引用类型);
- 深拷贝数组的方法:slice、concat、扩展运算符... 、Array.from;
- 深拷贝对象的方法:Object.assign()(注:如果对象属性值是简单类型string、number,该方法是深拷贝,如果对象属性值有array、object这种类型的,该方法就是浅拷贝)、扩展运算符;
- 深拷贝通用方法:JSON.stringify和JSON.parse();
- 递归循环方法
var obj = { id:1, name:'Andy', msg:{ age:18 }, color:['pink','yellow'] } var newobj = {} function deepCopy(newobj,obj){ for(let key in obj){ 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] } } } deepCopy(newobj,obj) console.log(newobj)