Javascript Date 如何在控制台记录时打印出字符串?

当我在 Javascript 中创建对象并将它们记录到控制台时,我几乎总是在控制台中看到一个 Javascript 对象。例如


var myObj = {

 bla: "foo"

}

console.log(myObj);

将输出为


{

  bla: "foo"

}

但是,Date行为不同。当我创建一个日期时,它以某种方式知道打印出一个表示日期对象日期的“字符串”。


例如:


var myObj = {

     date: new Date()

    }

    console.log(myObj);

得到我


{

   date: Sun Oct 25 2020 18:36:19 GMT-0700 (GMT-04:00)

}

这里的潜在机制是什么?我怎样才能对我自己的对象做同样的事情?


偶然的你
浏览 143回答 3
3回答

波斯汪

这是浏览器为 Date 对象创建的特殊例外,以便在记录时易于检查。否则,如果遵循默认行为,您将得到一个没有自有属性的空对象,也没有关于该对象实际包含什么的有用信息:但是,如果记录的内容被强制转换为字符串,您可以观察到一些类似的行为并在记录内容时显示任意字符串,方法是toString在对象上放置一个方法:const obj = {  toString() {    return 'foobar';  }};console.log(String(obj));要获得像 Date 对象一样实际记录的内容,而无需您进行任何强制,您必须更改浏览器的内部代码。这不是 JS 可以做的事情。还有一些其他类型的内置对象具有特殊的日志记录行为,包括:数组功能错误

忽然笑

这意味着 Date 对象toString在底层实现了方法。

尚方宝剑之说

实际上,new Date() 构造函数不会在控制台中打印字符串。它看起来像一个字符串,但对其运行 typeof 运算符,您会看到它是一个对象:const date = new Date()console.log(date)console.log(typeof date)此外,如果您是 React 开发人员,并且将尝试在大括号之间使用上述日期变量来输出动态内容,您将收到错误消息。如果它是一个字符串,它会完美地工作。之所以如此,是因为 JSX 表达式中的对象是无效的,而字符串是完全有效的。同样,调用 new Date() 的结果是一个对象。它看起来不像一个,但它绝对是一个对象。也可以在前面没有 new 关键字的情况下调用 Date() 构造函数。你猜怎么着?这种调用的结果是一个可以在 JSX 表达式中使用的普通字符串。const date = Date()console.log(date)console.log(typeof date)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript