Javascripts命令:window.alert vs console.log

Javascripts命令:window.alert vs console.log,javascript,Javascript,我是javascript的新手,所以请原谅我的天真。我发现了一种似乎前后不一致的行为,至少对我来说是这样。在进行一些测试时,我输入了以下两行代码: console.log(document.getElementById("errorMessage")); window.alert(document.getElementById("errorMessage")); 我完全期待着两者都能给我同样的结果,但不,我没有 console.log(document.getElementById("erro

我是javascript的新手,所以请原谅我的天真。我发现了一种似乎前后不一致的行为,至少对我来说是这样。在进行一些测试时,我输入了以下两行代码:

console.log(document.getElementById("errorMessage"));
window.alert(document.getElementById("errorMessage"));
我完全期待着两者都能给我同样的结果,但不,我没有

console.log(document.getElementById("errorMessage"));
给我:

    <span id="errorMessage">
向我提供了警报窗口,其中包含:

    [Object HTMLSpanElement]
有人能帮我理解为什么即使我传递了完全相同的参数,我也得到了不同的结果吗


补充说明:这不是一个重复的问题,因为上面提到的问题问的是哪一个更好,而不是两者之间的区别。

事实上,这两种方法给出的结果相同,只是您的控制台对SpanElement执行解析,和显示更多详细信息。

console.log将读取并转储它作为参数(对象、数组或字符串)接收的内容,而window.alert将只获取参数的字符串值。

console.log
允许执行“浏览器开发人员工具希望执行的任何操作”。因此,
console.log
仅适用于实时调试,在Firefox、Chrome和IE中表现不同(在IE中,它将显示与警报相同的文本)

现在,
alert
工作稳定,因为它将输入视为字符串,并根据需要应用
[[ToString]]]
转换。在使用
toString()
进行转换的DOM元素上,这不是很令人兴奋,正如所注意到的,它最终成为字符串“[Object blahblah]”。(我相信确切的文本可能因浏览器而异。)

通过手动将元素强制为字符串,可以很容易地获得与console.log相同的行为:

console.log("" + document.getElementById("errorMessage"))
然而,相反的情况并非如此,虽然可以通过在警报中显示来模拟,但在某些开发人员工具中,
console.log
行为结果简直是(奇妙的)魔术

这一魔力使Chrome能够对提供给console.log的对象(包括DOM元素)进行“实时检查”。但是,如上所述,IE的console.log(至少在IE10之前)也将值强制为字符串。。这不是那么神奇,很像警报

虽然alert可用于“快速调试”,但我建议使用
调试器
控制台.log
,以及适当的开发人员工具提供的断点/异常支持,因为它们更适合手头的任务。

alert()使用对象的toString()将传递给它的对象转换为字符串方法。与alert()不同,console.log()不仅限于显示简单字符串,还允许您与传递给它的对象进行交互。例如,允许您检查其属性


这些都是相同的结果。console描述对象,alert并不是那么聪明。@PSL这并不是上述问题的重复。这与为什么
console.log()
优于
alert()
有关。
console.log("" + document.getElementById("errorMessage"))