我真的无法理解javascript。也许有人可以解释我的不同之处:
validationErrors[value.element.name] = value.method;
console.log(validationErrors);
alert(validationErrors);
console.log(validationErrors)
返回带有值的格式良好的数组,alert(validationErrors)
返回空数组。为什么?
答案 0 :(得分:7)
控制台更像是一个调试环境,可以理解在日志函数中传递的JS对象。
另一方面,警报是一个对话框,将其参数强制转换为字符串值。这就是输出格式不如控制台的原因。
以下是警报框中实际发生的一小部分内容。
var validationErrors = [ 2, 3, 4 ];
console.log(toString(validationErrors));
Output >> "[object Window]"
使用控制台进行日志记录而非警报框也是最佳做法。
答案 1 :(得分:1)
你可以试试这个
alert(JSON.stringify(validationErrors));
答案 2 :(得分:1)
根据浏览器的不同,警报有一定的限制,但大多数情况下你可能最好保持在1000字以下,因为许多浏览器似乎在999之后开始截断。 如果您在提醒中提供对象,它将永远不会反映值,因此更喜欢控件对象和其他数据类型可以在警报中使用,但这不是一个好习惯。 控制台提供适当的数据视图,如数组中的对象,可以在控制台中轻松研究。
答案 3 :(得分:1)
警报用于打印消息,这意味着它用于显示字符串值。当您将除字符串以外的任何内容传递给alert时,它会调用它的.toString
函数并打印输出。
现在你为什么得到一个空字符串?
数组应该只有索引值。所以你可以做array[index] = "bla bla"
。但是当你执行array["something"] = "something else"
时,它会向该数组添加一个属性(因为数组也是Javascript中的对象)。
根据MDN
toString()方法返回表示指定数组及其元素的字符串。
简单来说,它将遍历数组的长度并使用,(comma)
但你没有元素。您已设置属性。所以长度为0,因此返回""
以下是模拟
var a = [];
a["test"] = "foo";
console.log(a);
console.log(a.toString());
alert({})

答案 4 :(得分:0)
Javascript中的所有对象都通过引用传递。因此,当您将某些内容传递给console.log()并在代码中进一步更改时,在控制台中您将看到更改的值。另一方面,alert()显示消息框并停止代码执行,因此在消息框中,您可以看到与alert()的通话时间完全相同的值。
出于调试目的,您可能希望使用浏览器的调试器 - 我建议使用Chrome Dev tools。来自codeschool.com的免费课程可以帮助您发现这样一个很棒的工具:https://www.codeschool.com/courses/discover-devtools