为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2023-06-09 17:24:24
当我在 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)}这里的潜在机制是什么?我怎样才能对我自己的对象做同样的事情?
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

这是浏览器为 Date 对象创建的特殊例外,以便在记录时易于检查。否则,如果遵循默认行为,您将得到一个没有自有属性的空对象,也没有关于该对象实际包含什么的有用信息:

//img1.sycdn.imooc.com//6482eff9000188ae04790086.jpg

但是,如果记录的内容被强制转换为字符串,您可以观察到一些类似的行为并在记录内容时显示任意字符串,方法是toString在对象上放置一个方法:


const obj = {

  toString() {

    return 'foobar';

  }

};


console.log(String(obj));

要获得像 Date 对象一样实际记录的内容,而无需您进行任何强制,您必须更改浏览器的内部代码。这不是 JS 可以做的事情。

还有一些其他类型的内置对象具有特殊的日志记录行为,包括:

  • 数组

  • 功能

  • 错误


查看完整回答
反对 回复 2023-06-09
?
忽然笑

TA贡献1806条经验 获得超5个赞

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

查看完整回答
反对 回复 2023-06-09
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

实际上,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)


查看完整回答
反对 回复 2023-06-09
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信