今天要来分享特性存取的秘密~
你知道当你在存取一个物件里面的特性时会发生什麽事情吗?
const obj ={
a: 16
}
obj.a; // 16
obj.a
是一个特性存取的动作,但是他不只是单纯只是找 obj
内有无 a
这个特性而已...
难道...
他会往外找!?
...
没有! 你想太多了xD
其实他会对他执行一个 [[GET]]
的作业,基本上他会先看你这个物件有没有你要找的特性,有的话他就回传该值,没有的话...
就会发生很可怕的事...
就是书上说在第十章的 [[Prototype]]
串链 会提到xDD 所以现在我也不知道
反正他有一个重要的结果是他如果找不到任何方法找到该值他就会回传 undefined
。
看起来就是找有的东西比找没有的东西来的麻烦许多~
你说是吧!?
既然有 Get
那有个 Put
也不稀奇(?
基本上这边就是当你要 assign
值给一个特性时他会做些啥?
存取器描述器
吗? 如果是就呼叫他的设值器
。资料描述器
吗? 在 严格模式就喷爆你,不是就不喷你。所以我说 存取器描述器
、资料描述器
那麽多专业名词到底是三...?
get
和 set
啦。那如果跟上面的 [[Get]]
一样找不到相关的特性,会怎麽做?
这部分也是属於之後第十章的 [[Prototype]]
的范畴xDD
我们之後来看看~
前面有说假使像是存取该不存在的特性时,他会回传 undefined
,但是有一种可能像是这样。
const obj={
a: undefined
}
obj.a; // undefined
嗯...
他就是把 undefined
丢进存在的特性当值,那我们到底要怎麽区分他到底存不存在呢?
可以使用以下两种方式
const obj={
a: undefined
}
('a' in obj); // true
('b' in obj); // true
obj.hasOwnProperty(a); // true
obj.hasOwnProperty(b); // false
以上是今天的文章
感谢收看
最近越来越忙,铁人赛也到了尾声,
可惜今天还是来不及写到迭代 Orz
你所不知道的 JS|范畴与 Closures,this 与物件原型 (You Don't Know JS: this & Object Prototypes))
>>: 第 28 型 - 路由 (Router) - Resolve / 延迟载入 (Lazy Router)
class Snake { constructor() { // 蛇头位子 this.head = ...
JavaScript 日常系列写着写着,就此进入了我的苦手范围QQ,之後的主题应该都是我的修罗场,考...
今天这一题是针对 Redis 服务的攻击,对於打腻 Web 的人应该会觉得满有趣的(?)。 网址:h...
Case01 跟 Day05 范例差不多,差异如下: Controller 於 Get 时,先写死固...
目标:资料飞轮 在 [Day 02] Why MLOps — 从"地平说" 走向...