2016-07-27 4 views
2

私はcssセレクタを含むツリー構造を持っていますが、私の目標はセレクタと一致する入力要素から値を取り出してツリーに配置することです。たとえば、idテキストボックスと値67の<input type="text/>がある場合、これを実行したいと思います。{selector: "#textbox"} - > {value:67}。javascript/typescriptが暗黙的に日付オブジェクトを文字列に変換するのはなぜですか?

入力タイプが日付の場合を除いて、私はこれをすべてのケースで使用できます。その場合、文字列を日付オブジェクトに変換したいと思います。私のコードは次のようになります

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 

を示すコンソールからの引用で、出力は私がChromeとFirefoxの、両方の収率でこのコードをテストしてみた

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 

だろう同じ結果。

+2

本当に文字列ですか。いくつかのコンソール機能/ "機能"かもしれません。 –

+0

いつでも日付にキャストすることができます。 'Date.prototype.toString' IIRCは実装に依存しますが、プラットフォームの独自の文字列表現からDateを構築している限り、上手くいくはずです。 –

+0

日付ではない日付にキャストしないでください!それはちょうど道の下で缶を蹴っているだけです。 –

答えて

4

Date()関数は数値または文字列を取り、文字列を生成します。 Read the documentation

JavaScriptのDateオブジェクトはコンストラクタとしてJavaScriptの日付を呼び出すことによってのみインスタンス化することができます(新しい演算子なしつまり)通常の関数として呼び出すDateオブジェクトではなく文字列を返します。他のJavaScriptオブジェクトタイプとは異なり、JavaScriptのDateオブジェクトは、おそらく、これは実際にDateオブジェクトを生成ようnew Date(val)の代わりDate(val)を使用したい何のリテラル構文

を持っていません。

+0

日付関数は、[*ゼロ*](http://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor-date)から[* 7 *](http: /www.ecma-international.org/ecma-262/6.0/#sec-date-year-month-date-hours-minutes-seconds-ms)引数を使用します。ビヘイビアーはいくつのタイプ(何が1つだけの場合は文字列、数字または日付かもしれない)に応じて変化します。 – RobG

関連する問題