[英]Accessing property in an object
考慮這個代碼片段
class A { constructor() { this._elem = 5; } get elem() { return this._elem; } } class B { constructor() { this._elem = 6; } } class C extends A { constructor() { super(); } } class D { constructor() {} } const a = new A(); const b = new B(); const c = new C(); const d = new D(); function foo(obj, name) { const val = 'elem' in obj ? obj.elem : 42; const val2 = obj.elem ? obj.elem : 42; console.log(`For ${name} val: ${val}, val2: ${val2}`); } foo(a, 'a'); foo(b, 'b'); foo(c, 'c'); foo(d, 'd');
我試圖弄清楚是否存在這樣一種情況:當obj
上不存在屬性elem
時直接使用obj.elem
可能會導致不正確的邏輯相對於"elem" in obj
僅當它存在並使用該值時。 似乎val
和val2
總是相同的。 兩者是等價的嗎?
不,它們不等價,這是因為obj.elem ? obj.elem : 42
obj.elem ? obj.elem : 42
將執行 getter 並查看其返回值是真還是假。 如果它恰好是假的,那么這個表達式的計算結果將是 42。然而, "elem" in obj
為真,與方法是否返回假值或真值無關。
不相關,但它也沒有效率,如obj.elem ? obj.elem : 42
obj.elem ? obj.elem : 42
將在 getter 返回一個真值時執行兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.