类型错误:console.log.apply 上的非法调用

IT技术 javascript google-chrome console
2021-02-07 07:37:07

如果您在 chrome 控制台中运行它:

console.log.apply(null, [array])

Chrome 会给你一个错误:

// TypeError: Illegal Invocation

为什么?(通过 OSX 在 Chrome 15 上测试)

1个回答

在执行上下文从控制台更改为任何其他对象的情况下,它可能不起作用:

这是意料之中的,因为 console.info 期望它的“this”引用是控制台,而不是窗口。

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

这种行为是意料之中的。

https://bugs.chromium.org/p/chromium/issues/detail?id=48662

相同的参数适用于其他函数,例如 console.log() 和 document.writeln()。因此,如果使用 call() 或 apply(),请始终提供正确的执行上下文。或者,如@JohnWilliams 所指出的那样使用 bind()。
2021-03-23 07:37:07
如果需要作为函数使用,可以使用console.info.bind(console)
2021-03-31 07:37:07
申请也一样: console.info.apply(console, arguments)
2021-03-31 07:37:07
那么你能console.info.call(console, "stuff")在所有支持 ES5 的浏览器中使用吗?
2021-04-13 07:37:07
当 DevTools F12 未打开时,这仍然适用于 IE11/Edge。
2021-04-13 07:37:07