为什么要写typeof item + item 呢
function unique(arr) {
var obj = {};
return arr.filter(function (item, index, arr) {
console.log(obj.hasOwnProperty(typeof item + item)) // 这一行代码是我自己添上去的
//为什么要写typeof item + item 呢
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}] //所有的都去重了
因为object的key是string类型的,无论你传入什么,他都会解析成字符串(symbol和Map等新特性除外),所以这就导致了数字1和字符串1,他在object中的key是相同的,而你应该不想把他们当成相同的数据给去除掉。所以这里使用了typeof来简单判断了下类型。