我在javascript中编写以下函数:
Number.prototype.niceFormat(options) {
var defaultOptions = {
thousandSeparator: ',',
leftPad: 0,
decimalPlaces: 2
};
if (typeof options.thousandSeparator != 'undefined'
&& options.thousandSeparator != null) {
defaultOptions.thousandSeparator = options.thousandSeparator;
}
}
麻烦的是我希望选项完全灵活。
如果我拨打niceFormat({decimalPlaces: 3})
,则相应地替换defaultOptions
属性decimalPlaces
。
我不愿意像defaultOptions
中的属性那样多次编写if语句。
是否有一种很好的方法可以灵活地覆盖defaultOptions
中的属性值?
基本上我正在为javascript中的对象寻找一种array_merge
。
更新:
我从Qantas和Crayon和Paul那里得到了答案并写下了这个:
Number.prototype.niceFormat = function(options) {
var defaultOptions = {
thousandSeparator: ',',
leftPad: 0,
decimalPlaces: 2
};
var env = defaultOptions;
if (typeof options != 'undefined') {
for (option in env) {
if (options.hasOwnProperty(option)
&& typeof options[option] != 'undefined') {
env[option] = options[option];
}
}
}
无论如何要进一步改善这一点?
答案 0 :(得分:1)
for (option in defaultOptions) {
if (typeof options[option]=='undefined') options[option] = defaultOptions[option];
}
答案 1 :(得分:1)
您需要做的是检查两者是否包含该属性,然后分配给它:
for (var i in options) if (options.hasOwnProperty(i) && defaultOptions.hasOwnProperty(i)) defaultOptions[i] = options[i];
hasOwnProperty()
检查该属性是否直接在该对象上(而不是通过任何原型或其他东西),并且它实际存在于该对象上。