JS引用数据类型-普通对象
引用数据类型
引用数据类型包含 Object 对象(Object 对象又包含:普通对象、Array 数组对象、正则对象、Date 日期对象…) 和 Function 函数.
object 对象数据类型
普通对象
普通对象由大括号来书写, 由零到多组属性名(key)和属性值(value)组成的属性组成, 每个属性用逗号隔开.
var person = {name:"xiaomi", age:12};
对象的操作
对象的操作: 键值对的增/删/改/查.
查(获取)
对象的获取有两种方式: 对象.属性名 / 对象[‘属性名’]
一般来说, 对象的属性名(key)都是字符串格式的.
console.log(person.name) // xiaomi
console.log(person['name']) // xiaomi
在获取属性值的时候, 如果该对象存在这个属性名则会获取到属性值(哪怕是null), 如果不存在属性名则会返回undefined.
console.log(person.price) // undefined
增/改
js中同一个对象属性名是唯一的, 不允许重复. 所以如果一个对象中没有该属性就增, 有就是修改属性值(value).
增/改: 对象.属性名 = 属性值
person.price = 1999;
console.log(person); // {name:"xiaomi", age:12, price:1999}
person['age'] = 18;
console.log(person); // {name:"xiaomi", age:18, price:1999}
删
真删除: 使用 delete 关键字删除一个属性, 彻底从对象中删除该属性
delete person.price;
console.log(person); // {name:"xiaomi", age:12}
假删除: 并没有删除属性, 只是让该属性的值为空(将属性值赋值为null)
person.age = null;
console.log(person.age); // null
一个对象的属性名不仅仅是字符串格式的, 还有可能是数字格式的, 其他数据类型的属性名都是转化成字符串格式(toString)来存储的.
var obj = {name:'xiaomi', 0:'hongmi'};
console.log(obj[0]); // hongmi
console.log(obj['0']); // hongmi
console.log(obj.0); // 报错 SyntaxError: Unexpected number
// 其他数据类型的属性名都是转化成字符串格式来存储的, 获取的时候也是先转化成字符串格式的属性名来获取
obj[true] = 1;
obj[null] = 2;
obj[undefined] =3;
obj[{}] = 4;
console.log(obj); // {0: "hongmi", name: "xiaomi", true: 1, null: 2, undefined: 3, [object Object]: 4}
console.log(obj[{}]); // 4
console.log(obj['[object Object]']); // 4
思考题:
var obj = {name:'xiaomi', sec_name:'hongmi'};
var name = 'sec_name';
var age = 'age';
console.log(obj.name); // xiaomi
console.log(obj['name']); // xiaomi
console.log(obj[name]); // hongmi 此时的name是一个变量, 相当于obj['sec_name']
console.log(obj[age]); // undefined 相当于obj['age']
原创文章,作者:tipak,如若转载,请注明出处:http://www.myqqu.com/note/javascript_lessons/js-yinyongshujuleixing-putongduixiang.html