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

时间:2016-07-27 16:37:04

标签: javascript date typescript casting

我有一个包含css选择器的树结构,我的目标是从与选择器匹配的input元素中取值并将它们放入树中。例如,如果headerdicom = dicominfo('Test.dcm'); a.a = 1; a.b = 2; a.c = 3; headerdicom.Private_0011_10xx_Creator = a; img = dicomread('Test.dcm'); dicomwrite(img, 'test_modif.dcm', 'ObjectType', 'MR Image Storage', 'WritePrivate', true, headerdicom) Undefined function 'fieldnames' for input arguments of type 'double'. 具有ID文本框和值67,我想这样做{selector:" #textbox"} - > {值:67}。

除非输入类型是日期,否则我在所有情况下都能正常工作。在这种情况下,我想将字符串转换为日期对象。我的代码看起来像这样

<input type="text/>

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

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;

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

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中测试过此代码,两者都会产生相同的结果。

1 个答案:

答案 0 :(得分:4)

Name[____________________] Paul a Robert b Cid c 函数接受一个数字或字符串并生成一个字符串。 Read the documentation

  

JavaScript Date对象只能通过调用JavaScript Date作为构造函数来实例化:将其作为常规函数(即没有new运算符)调用将返回一个字符串而不是Date对象;与其他JavaScript对象类型不同,JavaScript Date对象没有文字语法

您可能希望使用Date()代替new Date(val),因为这实际上会产生Date(val)个对象。