Jas*_*ske 17 javascript arguments function
在查看与将PHP函数移植到JavaScript相关的问题时.我看到我认为不正确的JavaScript:
function my_isnum(str, negative=false, decimal=false)
Run Code Online (Sandbox Code Playgroud)
然后我在JSFiddle中尝试了这个:
function my_isnum(str, negative=false, decimal=-2)
{
console.log(arguments);
console.log(str);
console.log(negative);
console.log(decimal);
}
my_isnum("5", "Hi");
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这是我在Firebug控制台中看到的:
["5", "Hi"]
5
Hi
-2
Run Code Online (Sandbox Code Playgroud)
现在在Chrome中,这就是我所看到的:
Uncaught SyntaxError: Unexpected token =
Run Code Online (Sandbox Code Playgroud)
我不明白这是一个由Firefox支持的早期标准的例子(MDN on function似乎没有提到这一点)?
los*_*rce 18
这似乎是在ECMAScript 6规范中,目前只有Firefox支持
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters
Lostsource的答案是正确的,来ECMA6,默认值很可能得到支持,我认为它会,但因为它仍然是一个工作草案,你不能真正确定...现在,你可以使用逻辑或:
function foo(bar, foobar)
{
bar = bar || 'foobar';//once
foobar = foobar || !!bar || true;//or multiple times
Run Code Online (Sandbox Code Playgroud)
这有点像三元一样.表达式从左到右解决:一旦JS遇到真值,那就是将要分配的内容:
var someVar = false || undefined || null || 0 || 1;
Run Code Online (Sandbox Code Playgroud)
将分配1 someVar.如果没有值传递给函数,则undefined默认情况下会分配所有参数,因此在这种情况下:
myArgument = myArgument || 'default';
//is the same as:
myArgument = undefined || 'default';//evaluates to "default"
Run Code Online (Sandbox Code Playgroud)
但是当您false作为参数传递,或者null,或者为空字符串时,将分配默认值,因此请小心.
在这些情况下,if/ternary更合适(如在JoeSin的答案中所见).三元等价物是:
some_val = typeof some_val === 'undefined' ? 'default' : some_val;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8177 次 |
| 最近记录: |