数组扁平化
var arr=[1,[2,[3,3],2],1]
function flat(arr){
var newArr=[]
for(var i=0;i<arr.length;i++){
//判断数据类型
if(Object.prototype.toString.call(arr[i])=='[object Array]'){
//扩展运算符作用: 1.将元素序列合成数组 2.将数组展开变为序列
newArr.push(...flat(arr[i]))
}else{
newArr.push(arr[i])
}
}
return newArr
}
console.log(flat(arr))
判断数据类型的四种方法(扩展):
JavaScript基本数据类型:Number String Null Undefined Boolean Symbol
引用数据类型:Object ( Function 、Array、RegExp、Date)
1.typeof
对于基本类型,除 null 以外,均可以返回正确的结果。
对于引用类型,除 function 以外,一律返回 object 类型。
2.instanceof
表达式:A instanceof B 判断A是否为B的实例,若是,返回true;若不是,返回false
只能用来判断两个对象之间的实例关系,无法准确判断数据类型
3.constructor
原理:函数定义后,JS引擎为其添加prototype原型对象,然后在prototype上添加属性constructor,指向函数的引用
当执行 var f = new F() 时,F 被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 f.constructor == F
null和 undefined无法判断数据类型
不稳定,被重写之后发生变化
4.toString(准确)
Object.prototype.toString.call()/Object.prototype.toString.apply()