Javascript。从数组输出对象的内置函数时出现奇怪的输出

Javascript. Weird output when outputting Object's built-in functions from array

此示例基于 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

参考https://jsfiddle.net/bmswqgz7/1/

let ocn = Object.create(null);

Object.setPrototypeOf(ocn, Object.prototype);

//ocn.valueOf(); // shows {}
//ocn.hasOwnProperty("x"); // shows "false"
//ocn.constructor; // shows "Object() { [native code] }"

console.log([ocn.toString(), ocn.valueOf(), ocn.hasOwnProperty("x"), ocn.constructor].join(' : ')); // A

console.log([ocn.toString(), ocn.valueOf()].join(' : '));  // B

这里A行输出": : false : function Object() { [native code] }",B行输出": [object Object]".

这很奇怪,因为在 A 行中,ocn.toString()ocn.valueOf() 没有输出,而在 B 行中,ocn.toString()[object Object] 没有输出 ocn.valueOf(),我们期望 ocn.valueOf(){}ocn.toString()[object Object]

所以它省略了 A 行的输出,B 行的输出是乱序的。

有人可以解释一下吗?

如果我逐行输出值,它可以正常工作:https://jsfiddle.net/bmswqgz7/2/

谢谢。

Could someone explain this?

JsFiddle's console is broken.

console.log("[object Object] : [object Object] : false : function Object() { [native code] }");

会输出乱码,不是预期的字符串。