一:判斷對象是否為空
4. 使用ES6的Object.keys()方法 //推薦方法還是放第一個吧
var data = {};
var arr = Object.keys(data);
console.log(arr.length == 0); //true;
1. 轉換成字符串進行比對
var data = {};
var flag = (JSON.stringify(data) == "{}");
2. for in 循環判斷
var data = {};
var a = function (){
for(var key in data) {
return false;
}
return true;
}
a(); //true
3. jquery的isEmptyObject方法
var data = {};
var a = $.isEmptyObject(data);
console.log(a); //true
二: 刪除對象中某個屬性
delete:
var a = {a : 1, b: 2};
delete a.b;
console.log(a); //{a: 1}
三:添加對象屬性
var a = {a: 1};
a.b = 2;
console.log(a); // {a: 1,b: 2}
四:對象的深拷貝與淺拷貝
最簡單明了的區別
淺拷貝是指, 修改B對象的屬性和方法會影響到A對象的屬性和方法, 我們稱之為淺拷貝
深拷貝是指, 修改B對象的屬性和方法不會影響到A對象的屬性和方法, 我們稱之為深拷貝
淺拷貝:
1. var a = {a: 1, b: 2};
var b = a;
b.c = 3;
b.b = 4;
console.log(a); // {a: 1, b: 4, c: 3}
深拷貝:
1. for in循環遍歷
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判斷ojb子元素是否為對象,如果是,遞歸復制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,簡單復制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a={a: 1, b: 2},b=deepClone(a);
a.b=4;
console.log(a); {a: 1,b: 4}
console.log(b); {a: 1,b: 2}
2. JSON.stringify 和 JSON.parse
function deepClone(obj){
let _obj = JSON.stringify(obj)
let objClone = JSON.parse(_obj);
return objClone
}
var a = {a: 1, b: 2};
var b = deepClone(a);
b.b = 4;
console.log(b); //{a: 1, b: 4}
console.log(a); //{a: 1, b: 2}
3. Jquery的extend方法
$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
target Object類型 目標對象,其他對象的成員屬性將被附加到該對象上。
object1 objectN可選。 Object類型 第一個以及第N個被合並的對象。
let a=[0,1,[2,3],4],b=$.extend(true,[],a); a[0]=1; a[2][0]=1; console.log(a,b);
