簡體   English   中英

訪問對象中的屬性

[英]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僅當它存在並使用該值時。 似乎valval2總是相同的。 兩者是等價的嗎?

不,它們不等價,這是因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM