- 如可判断对象是不是空对象?
1.1可以使用Object.keys(obj).length===0,判断出来没有属性
1.2 JSON.stringify(obj)===”{}“为true,则代表空属性
1.3 Object.getOwnPropertyNames获取到对象中的属性名,存到一个数组中,返回数组对象.当为空时也代表属性为空。
1.4 for in循环如果循环出来的值为空代表对象没有属性
延申:
// 循环的对象值是属性名 var obj={a:1,b:2,c:3}; for(var prop in obj){ console.log(prop+" "+obj[prop]); } // 循环的数组值是数组下标,并且不推荐循环数组,当数组赋值了Object.prototype也会被遍历出来 var arr = ['nick','freddy','mike','james']; for(var index in arr){ console.log(index +'. ' + arr[index]); } // 0. nick // 1. freddy // 2. mike // 3. james 主要区别:for...of 用来遍历数组,不可以遍历对象;相对于forEach是可以使用break;for..of适用于无需知道索引值的数组遍历,可以中断,可以怼字符串、类数组、map和set类型数组的迭代。
2.手写深拷贝
function deepCopy(obj){ if(typeof obj !== 'object') return let newObj = Arrary.isArrary(obj) ? [] : {} for( let key in obj){ if(obj.hasOwnProerty(key)){ newObj[key] = typeof obj[key] === 'object' ? deeCopy(obj[key]) : obj[key] } }
return newObj }
延申:JSON.stringify()方式不推荐使用,当对象内容为undefined,null,Date,RegExp,function,error时会报错;
hasOwnProperty是检测对象的自用属性,原型上的属性都不会检测,跨层级的属性也不会检测。
let obj={a:b,c:{d:e} obj.prototype = f:obj.hasOwnProperty(a)//true (d)//false (f) // false
标签:面试题,obj,数组,对象,汇总,2024,key,var,属性 From: https://www.cnblogs.com/LylePark/p/18025774