Javascript 检查函数中是否缺少参数

Javascript 检查函数中是否缺少参数,javascript,Javascript,这是检查函数中缺少参数的正确方法吗?这是否适用于所有浏览器?艾迪怎么样 function getName(name){ name = name != null ? name : "default"; return name; } 正确的检查方法是 if (typeof name === "undefined") { // ... } 当然,调用方仍然可以通过调用getName(undefined)来“愚弄”您,虽然提供了参数,但检查仍会将其标记为未提供。但这确实是一种

这是检查函数中缺少参数的正确方法吗?这是否适用于所有浏览器?艾迪怎么样

function getName(name){
    name = name != null ? name : "default";
    return name;
}

正确的检查方法是

if (typeof name === "undefined") {
    // ...
}
当然,调用方仍然可以通过调用
getName(undefined)
来“愚弄”您,虽然提供了参数,但检查仍会将其标记为未提供。但这确实是一种病态的情况。

你可以:

name = name || 'default';
也就是说,如果
名称
未定义或错误(
null
0
false
{}
[]
),将其设置为
“默认值”


js(h | l)int会对此表示不满,但它的工作原理至少可以追溯到IE7。它根本不是无效代码,也不是依赖于某些未记录的行为。

是的,这在所有浏览器中都适用,但如果您想查看是否定义了它,可以使用:

function getName(name){
   name = typeof(name) !== "undefined" ? name : "default";
   return name;
}

检查参数的方法取决于传递给函数的信息类型,以及希望函数如何处理边缘情况

在大多数情况下,您可以使用:

...
bar = bar || ...default value here...
...
但是,如果您希望传递错误的值(
false
0
NaN
'
未定义的
null
),则可能会出现问题:

函数foo(bar){
巴=巴| | 5
console.log(bar)
}
foo()//5
foo(未定义)//5
foo(null)//5
foo(1)//1

foo(0)//5,如果使用
name=name | | |“default”
方法,可能不是您想要的,但是传入
undefined
仍然可以正常工作。@tkone Jon说的是一个可能的误判。@NullUserException不是在我留下评论的时候。答案从那时起就被编辑过。@tkone:Er,否。悬停时间可以看到答案是在评论前2分钟发布的。三等号===是不必要的,因为typeof总是有类型字符串。因此,对于是否存在必要的参数,最起码的测试是“if(typeof name==”undefined“)…”。这当然会让虚假的参数看起来“缺失”。根据您所做的,这可能意味着大量误报。是的,它会。但若名称应该是某物或“默认值”,这就保证了它。如果
name
可以是
false
或其他空值,则不可以,您不能使用此方法,但是,如果不打算使用它,为什么要设置默认值呢?捕获空的或不正确的情况。在某些情况下,如果变量未定义,而允许0或空字符串作为有效值,则您希望使用默认值。你所做的将不分青红皂白地屠杀所有虚假的价值观。虚假与缺失不一样。这并不是要挖苦你的答案;只是指出这种方法可能存在的缺陷。在这种情况下,如何定义“正确”呢?为了给你最好的答案,我们需要知道覆盖参数的上下文。最近,我问是否可以在JavaScript函数中列出每个缺失参数的名称,我在这里找到了很多有趣的解决方案:非常全面,对一系列问题有了更好的答案。感谢您提供了如此全面的答案。奇怪的是,尽管ES2015引入了参数的默认值,如果函数调用缺少指定为没有默认值的参数的参数,则仍然不会出现语法错误。这不同于大多数其他编程语言,包括C和PHP。需要的字符比标准的“| |”答案多。在支持函数参数默认值的现代浏览器中,无论如何都不需要。