我们在做 js 调试的时候使用 alert 可以显示信息,调试程序,alert 弹出窗口会中断程序, 如果要在循环中显示信息,手点击关闭窗口都累死。而且 alert 显示对象永远显示为 [object]。 自己写的 log 虽然可以显示一些 object 信息,但很多功能支持都没有 console 好
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
[1]alert()
[1.1] 有阻塞作用,不点击确定,后续代码无法继续执行
[1.2]alert() 只能输出 string, 如果 alert 输出的是对象会自动调用 toString() 方法
e.g. alert([1,2,3]);//'1,2,3'
[1.3]alert 不支持多个参数的写法, 只能输出第一个值
e.g. alert(1,2,3);//1
[2]console.log()
[2.1] 在打印台输出
[2.2] 可以打印任何类型的数据
e.g. console.log([1,2,3]);//[1,2,3]
[2.3] 支持多个参数的写法
e.g. console.log(1,2,3)// 1 2 3
alert 和 console.log 的结果不同?
- score = [1,2,3];
- sortedScore = [];
- console.log(score);
- sortedScore = score.sort(sortNumber)
- console.log(sortedScore);
- function sortNumber(a, b) {
- return b - a;
- }
以上输出:
[3, 2, 1]
[3, 2, 1]
但是改成 alert:
- score = [1,2,3];
- sortedScore = [];
- alert(score);
- sortedScore = score.sort(sortNumber)
- alert(sortedScore);
- function sortNumber(a, b) {
- return b - a;
- }
以上输出:
1, 2, 3
3, 2, 1
为什么会这样?不应该都是:
1, 2, 3
3, 2, 1
吗?
经过一番研究发现是 chrome 实现的问题,对输出做了不太合适的优化,把 console.log 的实际执行推迟,相当于 "惰性" 求值,遇上数组、对象这样的引用类型就出上面的问题了。
这是一个很有历史的 BUG,上个月在开发版已经修复了。
来源: