假设我在JavaScript中有一个函数:
function something (variable) {
console.log(variable);
}
如果没有传递变量,如何设置,默认为空?
答案 0 :(得分:7)
当你调用一个函数时,JavaScript对于所需函数参数的数量并不是很挑剔;声明中提到但未传递的任何参数都将设置为undefined
类型。
例如:
function test(foo)
{
console.log(foo === undefined); // true
}
要设置默认值,至少有三个选项:
function test(foo)
{
console.log(foo || 'default value');
}
如果它是真实的,上面会输出foo
的值,否则会输出'default value'
。
function test(foo)
{
console.log(foo === undefined ? foo : 'default value');
}
如果foo
不是undefined
,则输出'default value'
,否则输出function test(foo)
{
console.log(arguments.length > 0 ? foo : 'default value');
}
。
最后,您可以计算传递的参数数量:
foo
如果传递参数,这将输出undefined
的值(无论其类型如何)。
虽然自ES5以来foo === void 0;
typeof foo === 'undefined'; // also works for undeclared variables
为not writeable,但并非所有浏览器都会如此警惕地强制执行此操作。如果您担心这个问题,可以使用两种方法:
{{1}}
答案 1 :(得分:2)
应该如此简单:
function something (variable) {
console.log(variable || null);
}
通常,您可以为这样的参数指定默认值:
function something (somevar1, somevar2 /* ... somevarn */) {
somevar1 = somevar1 || 'somevar1 not present';
somevar1 = somevar2 || 2;
somevar3 = somevar3 || {foo: 'bar', foobar: null}
/* etc. */
}
或者,如果您需要针对0
,false
等进行辩护(以及提供@Ketola),您可以做以下事情:
function something (somevar1) {
somevar1 = ['', 0, false, null, undefined].indexOf(somevar1) > -1
&& null || somevar1;
}
... this || that
被称为short circuit evaluation。
答案 2 :(得分:2)
以上所有内容都可以肯定,但这是最简单的方法,我最常使用它。
variable = variable ? variable : undefined; // you can use null as well
答案 3 :(得分:1)
您可以查看arguments
变量
function something (variable) {
if(arguments.length===0){console.log("variable is null");}
else{
console.log(variable);
}
}
另请查看此处以检查变量是否为空,
答案 4 :(得分:1)
测试变量的值如下:
function something (variable) {
variable = (typeof variable !== 'undefined') ? variable : null;
}
答案 5 :(得分:1)
或者更友好的(IMO)选项是:
function getProfile( singleVariable )
{
singleVariable = singleVariable || false;
if (singleVariable) {
alert('we have a var')
}
else {
alert('nothing opassed');
}
}
getProfile();
getProfile('tom');
然后当你开始传递大量参数,但希望功能灵活时,你可以这样做:
function getProfile(params)
{
params = params || {};
if (params.username) {
alert(params.username)
}
if (params.id) {
alert(params.id);
}
}
getProfile();
getProfile({username:'tom', id: 123654987});
而不是
function getProfile(singleVariable, otherVar, othervar2)
{
singleVariable = singleVariable || false;
otherVar = otherVar|| false;
otherVar2 = singleVariable2 || false;
if( singleVariable ){
alert('we have a var')
}
else {
alert('nothing opassed');
}
}
getProfile('tom', false, 'smith');
这是假的,是令人讨厌的..通过一个卑鄙的效率要高得多