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