2011-11-09 11 views
1

私はちょうどdateJSで始まっていて、すばらしいlibのようですが、明らかに何か(おそらく愚かな間違い)がありませんが、私の関数では3つの日付が必要です:clickedDate、weekStart & weekEnd。しかし、dateJSを使って、私は各変数を上書きしているようです。誰かが私の間違いを指摘できますか?dateJSは変数を上書きしています

var clickDate = myDate; 
    console.log(clickDate); 
var weekStart = Date.parse(clickDate).last().monday(); 
    console.log(clickDate); 
var weekEnd = Date.parse(clickDate).next().sunday(); 
    console.log(weekEnd); 

console.log('break'); 

console.log(clickDate); 
console.log(weekStart); 
console.log(weekEnd); 

コンソールには、これはDatejs問題ではありません、以下

Date {Wed Nov 30 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Mon Nov 28 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
break 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
+2

[SSCCE](http://sscce.org)をご覧ください。 JavaScript SSCCEのための素晴らしいツール:http://jsfiddle.net。文字列である 'myDate'とは何ですか?ところで、あなたは 'console.log(clickDate)'に2回連続して出会ったのですか? –

+0

[それは私のために働く](http://jsfiddle.net/LJJKn/)。 –

+0

より多くのグローバルを使用 –

答えて

3

を示しているが、機能(?)JavaScriptのDateオブジェクトの。 JavaScriptでは、Dateオブジェクトは変更可能であり、Dateオブジェクト値を新しい変数に設定すると、新しいオブジェクトではなく元のオブジェクトへの参照が作成されます。

これは昔ながらのJavaScript(なしDatejs)を用いて実証することができます。

Exmaple

var a = new Date(2011, 0, 1); 
var b = a; 
var c = b; 

console.log('a', a); // 1-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

// setting only 'a' will cause 'b' and 'c' to update as well. 
a.setDate(10); 

console.log('a', a); // 10-Jan-2011 
console.log('b', b); // 10-Jan-2011 
console.log('c', c); // 10-Jan-2011 

Datejsを使用すると、 "クローニング" Dateオブジェクトである場合にこの問題を回避する方法を。次のサンプルは、 'b'および 'c' Dateオブジェクトに対する.clone()関数の使用方法を示しています。

var a = new Date(2011, 0, 1); 
var b = a.clone(); // clone creates a new 'copy' of 'a'. 
var c = b.clone(); 

console.log('a', a); // 1-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

a.setDate(10); 

console.log('a', a); // 10-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

上記を実行するには、「B」と「C」の最終結果はまだ「」変更されているにもかかわらず、元の値を反映して表示されるはずです。

これが役に立ちます。

+3

Javascript *日付は変更可能です*、記載されているように不変ではありません。これは正しいタイプの参照です。しかし、参照型と値型は1つの側面ですが、可変性は全く異なるものです。すべてが良好だった場合、Dateは.Netのように(1.)不変(2.)の値型になります。 – citykid

関連する問題