一、typeof判断数据类型(判断数组跟对象都返回object)
console.log(typeof null);//object
console.log(typeof function(){
return 1;
});//function
console.log(typeof '小A');//string
console.log(typeof 1);//number
console.log(typeof a);//undefined
console.log(typeof undefined);//undefined
console.log(typeof []);//object
console.log(typeof NaN);//number
console.log(typeof {});//object
二、instanceof判断对象的原型链是否是指向构造函数的prototype
var arr = [1, 2, 3, 1];
console.log(arr instanceof Array);//true
//console.log(arr.constructor === Array); //true
三、对象的constructor属性
var arr = [1, 2, 3, 1];
console.log(arr.constructor === Array); //true
四、Object.prototype.toString.call(arr)
利用对象的toString可以准确判断是什么类型,call()改变this指向。
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
console.log(Object.prototype.toString.call(new Person));//[object Object]
五、es6方法 - Array.isArray()
Array.isArray([]); //true
数组扁平化
1. 利用 reduce()
export function flatten (arr) {
return arr.reduce(function (pre, cur) {
pre = pre.concat(cur);
return pre.concat(Array.isArray(cur.children) ? flatten(cur.children) : [])
}, [])
}
2. 扩展运算符
利用里 some()
,目的是判断当前数组是否还有数组元素,如果有则对数组进行一层展开,同时将展开结果作为下一次判断的条件。
let arr = [1, [2, [3, 4]]];
function flatten(arr) {
while (arr.some(i => Array.isArray(i))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flatten(arr)); // [1, 2, 3, 4]