gpt4 book ai didi

javascript - 防止未定义的参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:53:29 25 4
gpt4 key购买 nike

所以我使用一个对象来传递我的可选变量,如下所示:

var foo = function (options) {
var options = options || {}; //provide a default, so that
var bar = options.bar || 42; //this doesn't fail on 'foo();'
//do stuff
};

JSLint 提示我正在覆盖选项,如果它是假的,这就是我想要的。实际上,我可能应该检查它是否是一个对象,否则会抛出一个错误让用户知道发生了什么。所以 - 关于这一点 - 什么是好的形式?有人知道这方面的好书吗?此外,我将如何以 DRY 风格使用此模式编写一堆函数?

最佳答案

首先,您不需要将 options 参数重新分配给 var。其次,对于某些值要小心:

var foo = function (options) {
options = options || {};
var bar = options.bar || 42;
var baz = options.baz || 'fubar';
};
foo({ bar: 0, baz: "" });

foo 中,bar == 42 & baz == 'fubar' 因为 0"" 是假的。最好更详细一些以便更精确:

var foo = function (options) {
options = options || {};
var bar = typeof options.bar == 'undefined' ? 42 : options.bar;
var baz = typeof options.baz == 'undefined' ? 'fubar' : options.baz;
};

但是,为了 DRY,您可以创建一个 defaults 对象,然后将这两个对象都扩展到一个 settings 对象:

// generic shallow object extension, mutates obj1
var extend = function (obj1, obj2) {
for (var prop in obj2) {
if (obj2.hasOwnProperty(prop)) {
obj1[prop] = obj2[prop];
}
}
return obj1;
};

var foo = function (options) {
var defaults = {
bar: 42,
baz: 'fubar'
},
settings = extend(defaults, options);
};

因为您将不再使用 defaults 在此调用中,所以它发生突变并不重要。使用此方法:

foo();                    // -> settings = { bar: 42, baz: 'fubar' }
foo({ bar: 0 }); // -> settings = { bar: 0, baz: 'fubar' }
foo({ bar: 0, baz: "" }); // -> settings = { bar: 0, baz: '' }

关于javascript - 防止未定义的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com