TypeError:console.log.applyでの不正な呼び出し


129

これをChromeコンソールで実行する場合:

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

Chromeからエラーが返される:

// TypeError: Illegal Invocation

どうして?(OSXを介してChrome 15でテスト済み)

回答:


180

実行コンテキストがコンソールから他のオブジェクトに変更された場合、機能しない可能性があります。

これは、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


25
関数として使用する必要がある場合は、console.info.bind(console)を使用できます
John Williams

3
console.info.call(console, "stuff")ES5をサポートするすべてのブラウザで使用できますか?
mucaho

2
同じことが当てはまります:console.info.apply(console, arguments)
PeterM

同じ引数がconsole.log()やdocument.writeln()などの他の関数にも適用されます。したがって、call()またはapply()を使用する場合は、常に正しい実行コンテキストを提供してください。あるいは、@ JohnWilliamsが指摘したようにbind()を使用します。
アランCS

1
これは、DevTools F12が開いていない場合でもIE11 / Edgeに適用されます。
ベニーボッテマ2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.