js 对象
一 对象基础
(1)获取属性值的两种方式:对象.属性名 和 对象[属性名]
{属性名:属性值} 以及 对象.属性名中,属性名不能是变量,而对象[属性名] 中属性名可以是变量,该方式有时候会更灵活和强大。
(2)对象之间的比较
a.判断对象字面属性与值是否相等
基本类型string,number通过值来比较,而对象(Date,Array)及普通对象通过指针指向的内存中的地址来做比较。用===是判断不出来仅仅字面的属性和值相等的对象的。
Underscore和LoDash有一个名为_.isEqual()方法,可用来比较好的处理深度对象的比较(定义时候字面属性及值相等就会返回true)。
参考: Javascript 判断对象是否相等 http://www.zuojj.com/archives/775.html
b.数组中是否包含某对象(仅字面属性和值匹配)
不用 数组.includes()或者 数组.indexOf() (只能用到字符或数值等基础类型的包含判断) 用 loadsh 的 _.findIndex()
let arrA = [{a:1,b:2},{b:1,c:1}];
_.findIndex(arrA,{a:1,b:2}) // 0
_.findIndex(arrA,{b:1,c:1}) // 1
_.findIndex(arrA,{a:1,b:1}) // -1
(3)js 对象的浅拷贝和深拷贝
数组里增加对象要注意:
对象的值相当于其引用,不能直接赋值,那样会指向同一个对象,对一个操作也会影响另一个,需要去仅仅把值拷贝一份给新的对象,再添加到数组中:
//错误
addedTags.push(originTags[idx]);
//正确
let tagToAdd = Object.assign({},originTags[idx])
tagToAdd.attr1 = true;
addedTags.push(tagToAdd);
(4)判断对象是否为空对象(用JSON.stringfy() 判断是否 等于 '{}')
const a = {};
JSON.stringify(a) == '{}' //true
二 常用方法
1. 对象属性的遍历 for in 循环
例子
var person={fname:"Bill",lname:"Gates",age:56};
for (let x in person)
{
txt=txt + person[x]; // 参数x代表属性名
}
详细参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in
Object.keys() 返回对象的自身可枚举属性(不含Symbol属性)组成的数组 (也可以用来进行对象的遍历)
let obj = {'0':'a','1':'b','2':'c'};
Object.keys(obj).forEach(function(key){
console.log(key,obj[key]);
});
delete 操作符 用于删除对象的某个属性。
语法 delete expression expression 的计算机结果应该是某个属性的引用,例如:
delete object.property delete object['property']
例子
var Employee = {
age: 28,
name: 'abc',
designation: 'developer'
}
console.log(delete Employee.name); // returns true
console.log(delete Employee.age); // returns true
// 当试着删除一个不存在的属性时
// 同样会返回true
console.log(delete Employee.salary); // returns true
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete