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