故事是这样的~
var family = { name: '小明家'}console.log(family); // {name: '小明家';}console.log(family.a); // ?
如果今天我们用 物件实字 的方式产生了一个物件,那么对这个物件查找不存在的属性的时候,会回传甚么呢?
答案是~~~
Undefined!!!!
为什么 undefined 要这么强调呢~这个事实非常重要喔!
我们继续看下去,如果又我们对一个不存在的属性进行另一个属性的赋值,又会发生甚么事情呢?
var family = { name: '小明家'}family.a.b = 'c';
之后他就会告诉你说~喔~我们不能把 'b' 这个属性设定在一个 undefined 的东西上喔~
所以要避免这个问题有两种方式,
方法一: 调整物件的结构
var family = { name: '小明家' a: {}}family.a.b = 'c';
方法二: 直接对要设定的值进行变化
var family = { name: '小明家'}family.a = { b: 'c'}
方法二比较会用于一开始没办法完全掌握物件的资料结构会长成甚么样子的时候,所使用的方式。
好~再来要讨论为什么刚刚那个 undefined 我要加那么粗!
就是因为如果我们今天查找物件中不存在的属性的时候会是 undefined
那么有时候查找的东西是属于全域的变数的时候
var family = { name: '小明家'}family.a = { b: 'c'}console.log(a);console.log(family);
我们可以看到 console 回说,a 是 not defined 报错,但我后面还有 console.log(family);
就不执行了!
这也是 javascript 的特性,只要一报红色的错误,程式就会中断,不继续往下执行。
那么为了迴避这个错误,可以利用刚刚提到的观念
var family = { name: '小明家'}family.a = { b: 'c'}console.log(window.a); // 改为 window.aconsole.log(family);
这样修改以后,等同于在 window 这个物件中找寻不存在的属性,这样就只会回传 undefined 而不会报错噜~ console.log(family);
的 程式码也会继续执行
以上就是这篇文章的介绍~希望对各位有帮助~汪汪