【发布时间】:2013-05-14 13:05:35
【问题描述】:
假设我这样定义一个变量
var today = Date();
console.log(today.getMonth()); // Throw Error
而像 Error 类这样的其他类在没有 new 运算符的情况下调用它们的方法。
function factorial(x) {
if(x <= 1)
throw Error("x must not be negative");
return x*factorial(x-1);
}
包装对象(数字、布尔值、字符串)也可以在没有 new 运算符的情况下调用它们的方法。 那么,这是唯一一个在调用其方法之前需要 new 运算符或任何对象创建技术的类吗?
编辑: 由于 Date() 是字符串类型,所以应该调用它们的方法而不创建对象。因为字符串类型的行为就像它们是对象一样。那为什么不呢?
Edit 2:我认为这是唯一的核心功能,不能像其他功能(Array(), String(), Error() 等)一样与new Date() 相同。所以,这也是该语言的hidden 特性或ECMAScript 错误。
【问题讨论】:
-
typeof Date() === 'string' -
这有点不幸。让 Date 是一个将当前日期作为字符串提供的函数,充其量只是一个应该被清除为无用的兼容性功能。
-
@dystroy 我还没有看到一种语言可以正确处理与日期处理相关的一切
-
@soulcheck 一些最近的人似乎做对了 (for example go)。但遗憾的是,大多数语言在日期(和字符集)方面做得非常糟糕。
-
@dystroy 是的,我应该添加“流行”
标签: javascript date constructor