Javascript 为什么Date返回的是日期而不是对象';什么时候被引用?
这不是什么大问题,但它属于wat,所以我非常好奇 如果您在JS中创建一个新日期,然后引用它,那么它将返回看起来像日期值的内容,而不是像其他对象一样返回它的属性描述(即:Javascript 为什么Date返回的是日期而不是对象';什么时候被引用?,javascript,date,object,types,Javascript,Date,Object,Types,这不是什么大问题,但它属于wat,所以我非常好奇 如果您在JS中创建一个新日期,然后引用它,那么它将返回看起来像日期值的内容,而不是像其他对象一样返回它的属性描述(即:Date{Date:“some Date”})。它看起来像是一个值,而不是一个对象,但它确实是一个对象。Chrome的inspector还帮助指出了文本颜色的变化,以及它周围缺少”,因为它不是字符串 即: let date=新日期() 让人={ 名字:“迈克” } console.log(person)/{name:“mike”
Date{Date:“some Date”}
)。它看起来像是一个值,而不是一个对象,但它确实是一个对象。Chrome的inspector还帮助指出了文本颜色的变化,以及它周围缺少”
,因为它不是字符串
即:
let date=新日期()
让人={
名字:“迈克”
}
console.log(person)/{name:“mike”}或:person{name:“mike”}看起来,数据的dafault表示形式并没有打印您想要的内容,有一个默认表示方法与您想要的不匹配,如果您需要日期的替代表示形式,您可以编写类似于本例的代码
然后你做一些变通
function formatDate(date) {
//Checking if test attribute exist, in case it does
//I print it
return date + (typeof date.test === 'undefined')?'':date.test;
}
date = new Date();
date.test = 'testing'
console.log(formatDate(date));
详细阐述一下Satpal的评论:
JavaScript有一个带有一些特定规则的类型强制
系统。你可以读到他们
其中一个规则是对象通过其valueOf
方法强制数字(如果存在)。如果将对象强制为字符串,则调用其toString
方法;如果存在,则调用其valueOf
方法,并将结果从数字强制为字符串。如果这两种方法都不存在,则对象强制为一个字符串“[object object]”
Console.log和字符串插值需要字符串,因此日期对象被强制为字符串。注意date.\uuuu proto\uuuu.toString
方法
现在说到构造函数:JavaScript中的所有内容都是对象,包括函数。因此构造函数的Date()
函数和它通过new Date()
返回的对象都是对象。此外,\uuuuuuu proto\uuuu.constructor
属性实际上是指构造函数,它的prototype
属性被用作给定对象的\uuuuuuu
为了进一步澄清问题,您应该阅读JavaScript的函数继承,如前所述。ToString()方法在字符串插值中用作默认方法。这里发生了类似的事情吗?是的,谢谢,这有助于证实我对字符串插值的想法,但为什么对象的引用不像在其他对象上那样显示?这取决于控制台的实现(对于控制台,规范无法控制)。在FF上,您将看到日期为2018的可扩展树。。。。您的test
属性也将在那里。在StackSnippet的控制台上,他们调用JSON.stringify
(如果不是元素的话)来记录(Chrome)控制台显示日期对象的方式与它们在程序中的行为无关。一切都很好,就像你说的,它是一个物体,它有属性。未能在控制台上显示属性是控制台的问题,而不是日期对象的问题。(也就是说,您可能不应该向日期对象添加自定义属性)@MichaelTreat,但它仍然依赖于控制台实现。。。Ok Chrome不是唯一一个为日期对象调用类似toString()的浏览器,但这仍然只是他们的调用。例如,我们可以对元素说同样的话。在Chrome中,它们的外层TML被打印出来,而它们是对象。这只是开发工具开发人员所做的一个选择问题。不想格式化日期。只是想知道为什么当你引用对象时,它返回的是日期,而不是像其他对象那样返回整个对象的描述。这是因为它带有默认表示形式,日期总是令人头痛,格式化程序是标准的,除非你决定将日期封装在对象中作为一个atribute,这被称为polimorfism。
function formatDate(date) {
//Checking if test attribute exist, in case it does
//I print it
return date + (typeof date.test === 'undefined')?'':date.test;
}
date = new Date();
date.test = 'testing'
console.log(formatDate(date));