我正在用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
中的属性一样多。有没有一种很好的方法可以灵活地覆盖
defaultOptions
中的属性值?基本上,我正在为JavaScript中的对象寻找一种
array_merge
。更新:
我从澳航,蜡笔和保罗的评论中得到答案,并写道:
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];
}
}
}
无论如何要进一步改善?
最佳答案
您需要做的是检查两个属性都包含该属性,然后分配给它:
for (var i in options) if (options.hasOwnProperty(i) && defaultOptions.hasOwnProperty(i)) defaultOptions[i] = options[i];
hasOwnProperty()
检查该属性是否直接在该对象上(而不是通过任何原型或其他方式)以及它是否实际存在于该对象上。