2017-02-09 50 views
-1
class Abc{ 
private arrayVariable1 = []; 
private arrayVariable2 = undefined; 
} 

在arrayVariable1的情況下,默認情況下它初始化爲空數組,然後將元素推入它。 在arrrayVariable2的情況下,默認情況下它是未定義的,後來更改爲數組和元素推送給它。 與arrayVariable2相比,即使arrayVariable1爲空時,arrayVariable1是否還有內存?哪些編碼策略在打字稿中更好?爲什麼?

回答

1

沒有! ;)

此優化不會帶來太多的優先級,應儘可能優先顯示意圖並強制執行不變性。

要做到這一點,輸入變量,並使其只讀

class Abc{ 
    private readonly arrayVariable1: string[]; 

    constructor() { 
     arrayVariable1 = [] 
    } 
} 

readonly是唯一真正在編譯時強制執行,但對錯誤分配一個很好的保護作用進一步下跌

0

(聲明:我的工作是查克拉的JavaScript引擎,而在微軟)

不arrayVariable1需要的內存相比,arrayVariable2即使它是空的?

是的,返回一個空數組使用比由於內部Array對象狀態和初始化的undefinednull值更多的內存。

鑑於微優化的性能影響,如後期初始化屬性是忽略不計的,必然增加代碼的複雜性成本(如在你的例子中,你將需要檢查,看看是否arrayVariable既不可─undefined,而不是 - null當你的代碼可能首先將值添加到列表中的代碼會更易於閱讀和理解隨後的程序員,如果你的財產熱切初始化使用= []空數組

關於你使用的private arrayVariable2 = undefined:你。應該使用null而不是如果你想定義一個「未設置」或空的初始屬性值。undefined有特殊的規則和d很容易用它拍攝自己的腳:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined - 在class中使用undefined會產生相反的效果,因爲您正在取消類與運行時定義的原型對象相比的性能優勢。

+0

你能與問題闡述在實例成員上使用'undefined'導致去最佳化? –