JavaScript 的物件结构,基本会是 {}
包覆 属性:值,如下:
var person = { name: '小明', members: { father: '爸爸', mother: '妈妈', son: '小明' }, callHome: function(){ console.log('回家了'); }};
而属性的值,也可以是另一个物件或者是 function
当我们要呼叫物件内的属性可以使用 .
person.name
如果是物件型别的属性,也可以接续下去person.members.son
如果是一个 functionperson.callHome()
而在物件内没有定义的属性,也可以直接透过 .
赋予值person.room = 4
这时候在 console 看 person 这个物件,就会多了 room 这个属性
但是当要尝试去读取一个物件内没有的属性时,这时候就会出现 undefined
console.log(person.floor);
console 会出现 undefined
而又要尝试挂载属性跟值到 undefined 下面时,会出现什么呢 ?
person.floor.stair = 4;
这时候 console 会出现 Uncaught TypeError: Cannot set property 'stair' of undefined
除了新增属性,当然也可以删除属性
delete person.name
这时候在 console 查看 person 这个物件,就会发现 name 这个属性被移除掉了
而物件最大的特性就是传参考的特性,举个例子
var a = 1;var b = a;console.log(b);// 这时候 console 会出现 1 ,很符合预期
如果这时候修改了 b 把值改为 2,重新在 console 查看,a 会是 1,b 会是 2
这一切都很符合预期,a 和 b 之间互不影响,但这是在纯值的情况下
如果是在物件的情况下呢 ?
var person = { name: '小名'};var person2 = person;person2.name = '大名';console.log(person.name);
这个时候会发现 person 的 name 属性也被修改了,但明明重新赋值的是 person2 的 name 属性,这就是物件的传参考的特性,因为 person 和 person2 都是指向同样的记忆体空间,并非是複製值到另外一个变数身上
可以用 ===
来验证
console.log(person === person2);// true