web-dev-qa-db-ja.com

「+新しい日付」でプラス記号は何をしますか

私はこれをいくつか見ました 場所

function fn() {
    return +new Date;
}

そして、日付オブジェクトではなくタイムスタンプを返していることがわかりますが、プラス記号の動作に関するドキュメントは見つかりません。

誰でも説明できますか?

229
Ken

これは+単項演算子で、次と同等です:

function(){ return Number(new Date); }

参照: http://xkr.us/articles/javascript/unary-add/

およびMDNで: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus

279
kentaromiura

JavaScriptは緩やかに型付けされているため、特定の状況で型強制/変換を実行します。

http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html

他の例:

>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
41
Jonny Buchanan

JavaScriptの日付は文字列として書くことができます:

2015年9月10日木曜日12:02:54 GMT + 0530(IST)

または数字として:

1441866774938

数値として書かれた日付は、1970年1月1日00:00:00からのミリ秒数を指定します。

あなたの質問に来ると、代入演算子 '='の後に '+'を追加することで、Dateを等しい数値に変換することがわかります。

number(new Date())のようなNumber()関数を使用しても同じことが実現できます。

var date = +new Date(); //same as 'var date =number(new Date());'
6
Dev

「単項加算」演算子に関する specification を次に示します。それが役に立てば幸い...

5
Pablo Cabrera

さらに情報を提供するために:

覚えていれば、2つの日付の時差を見つけたいときは、次のようにします。

_var d1 = new Date("2000/01/01 00:00:00"); 
var d2 = new Date("2000/01/01 00:00:01");  //one second later

var t = d2 - d1; //will be 1000 (msec) = 1 sec

typeof t; // "number"
_

d1-0のタイプをチェックすると、これも数字です。

_t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"
_

+は日付を数値に変換します:

_typeof (+new Date()) //"number"
_

ただし、0 + new Date()notと同様に扱われます。文字列として連結されます:

_0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
_
2
S.Serpooshan

単項加算演算子であり、明示的な数値変換にも使用されるため、+new Date()を呼び出すと、valueOf()を使用してそのオブジェクトの数値を取得しようとしますtoString()から文字列を取得します

new Date().valueOf() == (+new Date)  // true
1
Raghavendra