我有一个包含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/