console.log 除了 returns undefined 什么都不打印
console.log doesn’t print anything but returns undefined
我制作了一个脚本,可以将我在 duolingo 上学习的所有句子抓取到一个 console.log 输出中。
直到最近 console.log 开始出现奇怪的行为时,它才完美运行:
console.log("Hello\tWorld")
undefined
无论我输入什么 console.log 都不会打印出来
console.log(document)
undefined
这只发生在这个特定的页面上:
https://www.duolingo.com/practice
(您需要登录)
它甚至是一件事吗?在您的页面上阻止 console.log 之类的功能,从而完全阻止它打印任何结果?
有没有办法在控制台中打印一些东西?
不,不是。 console.log()
是一个 void
-return 函数,这意味着它不 return 任何值 (spec here).
因此,当您在 Chrome 的控制台中 运行 时,字符串(即 Hello\tWorld
)被正确记录到控制台,但是 Chrome还报告了函数的 return 值,即 undefined
因为 console.log()
没有 return 任何东西。
您可以在下面的屏幕截图中看到 Chrome 正确地将 Hello Word
记录到控制台,然后 returning undefined
:
"undefined" 只不过是您调用的函数的 return。
它打印字符串但是因为它没有 return 任何内容所以控制台闪烁未定义。
尝试
function abc(){return 2}
现在当你调用 abc()
它将显示 2(未定义)
我在 Chrome 遇到了同样的问题。然后我注意到在过滤器旁边,就在控制台提示的上方,它说 "Hide all",它抑制了 console.log() 打印的消息。我将其更改为 "Default",问题就消失了。这与 return 类型无关,如前所述,它是无效的。它只是 Chrome 过滤输出。
我用 console.info
而不是 console.log
。
后者至今仍return在该特定页面上没有任何内容。
如果您在控制台中键入 console
,您将看到类似以下内容:
log: ƒ ()
...
[[FunctionLocation]]: app-676b15de.js:formatted:54288
这表明 console.log() 函数正在被 app-676b15de.js
覆盖。如果您查看该文件,您会看到:
window.console && fY.forEach(function(e) {
var t = console[e];
console[e] = function() {
for (var e = [], n = 0; n < arguments.length; n++)
e[n] = arguments[n];
(k() || window.verbose) && Function.prototype.apply.apply(t, [console, e])
}
})
最后一行阻止控制台函数执行,除非 k()
或 window.verbose
为 true。
这意味着您可以有效地 re-enable console.log() 通过将此添加到脚本的顶部:
window.verbose = true;
仅供参考,截至本 post 时,Duolingo 页面正在覆盖:
console.log()
console.error()
但不是:
console.info()
console.warn()
因此,您也可以使用最后两个函数中的任何一个来代替前两个函数,而无需进行任何其他修改。
尝试恢复默认设置并重新加载控制台。 #document 将重新出现在控制台的第一行 window 并且您已准备就绪。
设置 > 首选项 > 选项卡底部的按钮 "Restore defaults and reload"。
我制作了一个脚本,可以将我在 duolingo 上学习的所有句子抓取到一个 console.log 输出中。 直到最近 console.log 开始出现奇怪的行为时,它才完美运行:
console.log("Hello\tWorld")
undefined
无论我输入什么 console.log 都不会打印出来
console.log(document)
undefined
这只发生在这个特定的页面上: https://www.duolingo.com/practice (您需要登录)
它甚至是一件事吗?在您的页面上阻止 console.log 之类的功能,从而完全阻止它打印任何结果?
有没有办法在控制台中打印一些东西?
不,不是。 console.log()
是一个 void
-return 函数,这意味着它不 return 任何值 (spec here).
因此,当您在 Chrome 的控制台中 运行 时,字符串(即 Hello\tWorld
)被正确记录到控制台,但是 Chrome还报告了函数的 return 值,即 undefined
因为 console.log()
没有 return 任何东西。
您可以在下面的屏幕截图中看到 Chrome 正确地将 Hello Word
记录到控制台,然后 returning undefined
:
"undefined" 只不过是您调用的函数的 return。 它打印字符串但是因为它没有 return 任何内容所以控制台闪烁未定义。
尝试
function abc(){return 2}
现在当你调用 abc() 它将显示 2(未定义)
我在 Chrome 遇到了同样的问题。然后我注意到在过滤器旁边,就在控制台提示的上方,它说 "Hide all",它抑制了 console.log() 打印的消息。我将其更改为 "Default",问题就消失了。这与 return 类型无关,如前所述,它是无效的。它只是 Chrome 过滤输出。
我用 console.info
而不是 console.log
。
后者至今仍return在该特定页面上没有任何内容。
如果您在控制台中键入 console
,您将看到类似以下内容:
log: ƒ ()
...
[[FunctionLocation]]: app-676b15de.js:formatted:54288
这表明 console.log() 函数正在被 app-676b15de.js
覆盖。如果您查看该文件,您会看到:
window.console && fY.forEach(function(e) {
var t = console[e];
console[e] = function() {
for (var e = [], n = 0; n < arguments.length; n++)
e[n] = arguments[n];
(k() || window.verbose) && Function.prototype.apply.apply(t, [console, e])
}
})
最后一行阻止控制台函数执行,除非 k()
或 window.verbose
为 true。
这意味着您可以有效地 re-enable console.log() 通过将此添加到脚本的顶部:
window.verbose = true;
仅供参考,截至本 post 时,Duolingo 页面正在覆盖:
console.log()
console.error()
但不是:
console.info()
console.warn()
因此,您也可以使用最后两个函数中的任何一个来代替前两个函数,而无需进行任何其他修改。
尝试恢复默认设置并重新加载控制台。 #document 将重新出现在控制台的第一行 window 并且您已准备就绪。
设置 > 首选项 > 选项卡底部的按钮 "Restore defaults and reload"。