jquery console.log并提醒不同的值

时间:2016-07-14 11:20:36

标签: javascript

我真的无法理解javascript。也许有人可以解释我的不同之处:

validationErrors[value.element.name] = value.method;
console.log(validationErrors);
alert(validationErrors);

console.log(validationErrors)返回带有值的格式良好的数组,alert(validationErrors)返回空数组。为什么?

5 个答案:

答案 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