我想要的東西代碼高爾夫球解決方案,它下面的等價:Javascript對象違約
myFunc = function(config){
if (typeof config !== 'object') { config = {}; }
config.property = config.property || 123;
};
基本上是有一個較短的方式,以確保我一直在傳遞一個對象,如果沒有創建它,併爲它分配隨機值?
我想要的東西代碼高爾夫球解決方案,它下面的等價:Javascript對象違約
myFunc = function(config){
if (typeof config !== 'object') { config = {}; }
config.property = config.property || 123;
};
基本上是有一個較短的方式,以確保我一直在傳遞一個對象,如果沒有創建它,併爲它分配隨機值?
我通常使用合併幫手,通常爲jQuery.Extend()
(請參閱documentation)。但是如果你不想使用jQuery,那麼類似的幫手可能會寫得很微不足道。不過,我通常會做這樣的事情:
myFunc = function(config){
var defaults = { property: 123 };
config = $.extend({}, defaults, config);
};
基本上,你正在擴展與默認值,然後你通過配置一個空的對象時,您總是會得到有至少你的defaults
屬性的新對象。我肯定會推薦將你的對象合併代碼抽象爲它自己的幫助器,只要你不在每個構造器中重複相同的邏輯。
這裏的另一個替代方案,是在默認值的小更高效。在當前代碼中(分配右側的||
短路),即使已經設置了值,作業也是始終爲。使用下面的語法,僅當需要默認值時纔會進行分配。
var myFunc = function(config) {
config || (config = {});
config.property || (config.property = 123);
};
請注意,這是一個微型的優化,絕不會做出一個可衡量的業績差異,但我認爲這是一個整潔的方法和問題本身就是一種微optimizey的下手:)
||
左側的表達式對於設置的值的類型有意義。例如,如果
0
是一個有效的值,那麼你會想要一個比當前更強大的表達式(它將在任何falsey值上分配默認值)。另一種方法是檢查屬性是否已定義。
既然你想防止配置被傳遞爲普通對象以外的東西,我不認爲你可以縮短它或使用這裏提供的大多數其他版本。事實上,我認爲你必須添加額外的測試,看看配置是不是null
,因爲null
有類型的'對象'。
myFunc = function(config){
if (!config || typeof config !== 'object') { config = {}; }
config.property = config.property || 123;
};
測試用例,這適用於:
myFunc(null);
myFunc();
myFunc("{}");
myFunc("{property: 100}");
myFunc("aa");
myFunc([]);
myFunc(5);
可以'config'是什麼?在語義上,它看起來像是未定義的或者是一個對象(因爲你必須事實上分配屬性)。有沒有你不使用'||'的原因? – pimvdb
要小心,typeof null ==「object」。 – shabunc