为什么javascript中的内置构造函数返回一个值而不是一个对象?它们是用new运算符调用的,它们仍然不返回一个对象。如何创建一个不返回像这样的对象的构造函数:
new Number() //returns 0 instead of [Object object]
new String() //returns ""
new Date() //returns today's date
function SomeConstructor() {
return "Value"
}
new SomeConstructor() // [Object object]
SomeConstructor() // returns "Value"
如何创建这样的构造函数?
答案 0 :(得分:0)
它们确实是对象,您可以查看typeof
。
要获取子类型,您可以使用Object.prototype.toString
正如@Michael Ritter指出:
它只是不打印为[Object object],因为它们实现了 toString()方法(返回用于的字符串表示形式) 印刷)
console.log( typeof new Number()) //object
console.log( typeof new String()) //object
console.log( typeof new Date()) //object
console.log( Object.prototype.toString.call(new Number())) //[object Number]
console.log( Object.prototype.toString.call(new String())) //[object String]
console.log( Object.prototype.toString.call(new Date())) //[object Date]
要回答第二个问题,只需返回对象形式而不是原始形式的任何内容。原因可能是found here
function SomeConstructor() {
return new String("Value");
}
console.log(new SomeConstructor(), new SomeConstructor().valueOf());