Javascript. Странный вывод при выводе встроенных функций Object из массива - PullRequest
0 голосов
/ 12 июля 2020

Этот пример основан на 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/

Спасибо.

1 Ответ

1 голос
/ 12 июля 2020

Может кто-нибудь объяснить это?

Консоль JsFiddle не работает .

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

выведет искаженную строку, а не ожидаемую строку .

...