为什么console.log()polyfill不使用Function.apply()?

时间:2012-07-20 17:30:42

标签: javascript debugging polyfills

我一直在研究一些流行的console.log()包装/填充:

我注意到他们都接受了多个arguments,但他们都做了这样的事情:

console.log(arguments);

这导致像这样的输出(在Chrome中):

<code>console.log(['foo', 'bar', $('body')])</code>

然而,至少在像Chrome或Firefox这样的现代浏览器中,console.log()也接受多个参数,这样就可以产生(恕我直言)卓越的输出:

console.log.apply(console, arguments)

这导致像这样的输出(在Chrome中):

<code>console.log.apply(console, ['foo', 'bar', $('body')])</code>

为什么我应该避免将console.log.apply()用于多个参数?或者这仅仅是品味还是节省字节?

2 个答案:

答案 0 :(得分:1)

我个人建议您在必须时只使用.apply().apply()是将数组作为函数参数传递的唯一方法。如果您不需要传递数组,那么只需使用console.log()即可。它不那么冗长,而是直接调用。

答案 1 :(得分:0)

请注意,apply需要数组参数!

因此调用console.log(args)必须是console.log.apply(console, [args]),而不是console.log.apply(console, args)才能表现相同 - 在您的示例中,数组中的每个项目都成为他在申请中的自己的参数。

另一方面,您也可以拨打console.log("foo", "bar", $("body"))