Probably a naive question - if this snippet is executed (I'm running with Node.js v12.16.3
, same result in Chrome apart from the error type):
const obj = {}
Object.defineProperty(obj, 'a', {
writable: false,
value: 13
})
obj.a = 14
It will, obviously, throw an error, but the message string of that error has strange representation of an object:
TypeError: Cannot assign to read only property 'a' of object '#<Object>'
The question is - why it's stringified as #<Object>
?
Defining a toString
method on the object will render it as if it were called with Object.prototype.toString.call(obj)
:
const obj = {
toString () {
return 'stringified obj'
}
}
Object.defineProperty(obj, 'a', {
writable: false,
value: 13
})
console.log(`${obj}`)
obj.a = 14
TypeError: Cannot assign to read only property 'a' of object '[object Object]'
While console.log
outputs correctly. How to make that TypeError
output the correct string representation? What does it use internally?
from JavaScript TypeError, prints object as '#
No comments:
Post a Comment