某些函數返回相同的對象,不管是否被稱爲構造函數。我應該在調用返回相同對象的函數時使用`new`,不管是否被稱爲構造函數?
在性能方面,我應該使用
new RegExp(rg, flags);
new Array(1000);
new Object(whatever);
...
或
RegExp(rg, flags);
Array(1000);
Object(whatever);
...
?
編輯:我錯了,如果我使用Object()
或new Object()
某些函數返回相同的對象,不管是否被稱爲構造函數。我應該在調用返回相同對象的函數時使用`new`,不管是否被稱爲構造函數?
在性能方面,我應該使用
new RegExp(rg, flags);
new Array(1000);
new Object(whatever);
...
或
RegExp(rg, flags);
Array(1000);
Object(whatever);
...
?
編輯:我錯了,如果我使用Object()
或new Object()
這取決於類型它很重要。對於Array
它相當於:
當
Array
被稱爲函數,而不是作爲一個構造函數,它創建和初始化一個新的Array
對象。因此函數調用Array(…)
等價於具有相同參數的對象創建表達式new Array(…)
。
對於Object
:
當
Object
被稱爲一個函數,而不是作爲構造,它執行一個類型轉換。 當Object
被稱爲new
表達式的一部分時,它是一個可以創建對象的構造函數。
您可以在spec中查找其他類型。
在性能
方面在性能方面,使用的文字儘可能
// Array
var arr = [0, 2, 4];
// Object
var obj = {foo: 'bar'};
// RegExp
var re = /foo/ig;
這個標題與問題很不相同。爲什麼不在[JSPerf](http://jsperf.com/)上運行一些測試?要真正回答這個問題,你需要指定你關心的瀏覽器和構造函數。我的直覺是,它不會對性能產生重大影響。 – fncomp