【发布时间】:2018-04-14 05:52:37
【问题描述】:
我在试验 JavaScript,最终得到了这个 sn-p:
var num = new Number(20);
function f(n) {
n["foo"] = "bar";
}
// the printed object has a "foo" property.
console.log(num, f(num));
我从没想过打印的对象会在f(num) 调用中添加foo 属性,因为f(num) 在我的console.log 中的num 之后(我使用的是Chrome)。
但这发生了,我的第一反应是console.log 是在运行所有的参数并打印出结果或其他东西,所以我查看了 MDN 的 console.log 文档,但没有任何相关内容.
然后我偶然发现了this StackOverflow 问题。
第二个和第三个问题说console.log与对象一起使用时有点晚了,但在这种情况下,以下sn-p中的打印对象也应该具有foo属性(因为它是Number 对象),它不会:
var num = new Number(20);
function f(n) {
n["foo"] = "bar";
}
// no "foo" property
console.log(num);
f(num);
我提到的问题的公认答案几乎说明了第二个和第三个答案所说的内容,除了它还指出行为取决于控制台或浏览器。那么,现在不同的浏览器如何处理这种事情(这个问题来自 6 年前)? console.log 是否仅对超大对象异步?最初的问题是,为什么我的第一个示例中的 num 会打印出带有 foo 属性?
【问题讨论】:
-
显然
console.log()在 Chrome 中是“某种”异步的。前几天也出现类似问题:stackoverflow.com/questions/47046935 -
这个问题也没有得到回答,这有点令人沮丧。但是,如果它是异步的,那么什么时候是异步的呢?正如我在第二个示例中所展示的那样,它应该不是异步的(根据我链接到的问题的答案)。
-
@Taurus 这并不是真正的异步,但检查对象可能是异步完成的。详情请见here。
标签: javascript google-chrome firefox console console.log