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