javascript - 为什么 javascript/typescript 会隐式地将日期对象转换为字符串?

标签 javascript date typescript casting

我有一个包含CSS选择器的树结构,我的目标是从与选择器匹配的输入元素中获取值并将它们放入树中。例如,如果有 <input type="text/>使用 id 文本框和值 67,我想执行此操作 {selector: "#textbox"} -> {value: 67}。

我在所有情况下都可以使用此功能,除非输入类型为日期。在这种情况下,我想将字符串转换为日期对象。我的代码如下所示

val = sel.val();
let type = sel.attr("type");
if(type == "number")
{
    val = Number(val);
}
else
if(type == "date")
{
    val = Date(val);
}

//#1
ast["value"] = val;
//#2
delete ast.selector;

在第 1 点,当输入类型为日期时,val 是一个 Date 对象。在第 #2 点,ast["value"]/ast.value 也是一个 Date 对象。但是,打印整个 ast 对象会将 ast["value"]/ast.value 显示为字符串。该字符串值会传播到代码的其余部分并导致问题。这是来自控制台的引用,显示了这一点

Wed Jul 27 2016 10:14:19 GMT-0600 (MDT) eval.js:249 //ast["value"] at point #2
Object {selector: "this", value: "Wed Jul 27 2016 10:14:19 GMT-0600 (MDT)"} eval.js:250 //ast at point #2

如果日期没有被隐式转换,输出将为

Wed Jul 27 2016 10:14:19 GMT-0600 (MDT) eval.js:249 //ast["value"] at point #2
Object {selector: "this", value: Wed Jul 27 2016 10:14:19 GMT-0600 (MDT)} eval.js:250 //ast at point #2

我已经在 Chrome 和 Firefox 中测试了这段代码,两者都产生相同的结果。

最佳答案

Date() 函数接受一个数字或字符串并生成一个字符串。 Read the documentation :

JavaScript Date objects can only be instantiated by calling JavaScript Date as a constructor: calling it as a regular function (i.e. without the new operator) will return a string rather than a Date object; unlike other JavaScript object types, JavaScript Date objects have no literal syntax

您可能想要使用 new Date(val) 而不是 Date(val),因为这实际上会生成一个 Date 对象。

关于javascript - 为什么 javascript/typescript 会隐式地将日期对象转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618696/

相关文章:

javascript - Jquery正则表达式获取$符号后的数字

php - 将日期发布到我的数据库中

typescript - 是否可以从流式代码生成 typescript 代码?

联合返回类型的 TypeScript 泛型剩余参数

javascript - 如何在 Angular http请求的错误和成功回调之间共享变量

javascript - jquery - 检查文件是否相同

javascript - 如何确定鼠标光标的起点和终点?

postgresql - 将字符串时间戳转换为日期

javascript - 如何在 JS 中获取给定周数的日期范围

javascript - typescript - 未定义命名空间问题