2011-07-13 8 views
130

これは本当に簡単な質問のように聞こえるが、私は運がない。 +djavascript:plus symbol before変数

function addMonths(d, n, keepTime) { 
    if (+d) { 

を意味しますか?

+0

「[返品+新しい日付]」にプラス記号が表示される可能性があります(http://stackoverflow.com/questions/221539/what-does-the-plus-sign-do-in-return- new-date) – nawfal

+1

同じ問題ですが、他のページのタイトルには、一般的なケースは記述されていません。 – geotheory

+0

JavaScriptの「+ ...」とはどういう意味ですか?(https://stackoverflow.com/q/15129137/1048572) – Bergi

答えて

158

+演算子は、オブジェクトの数値表現を返します。したがって、あなたの特定のケースでは、dが非ゼロの数字であるかどうかについてifを述語にしているように見えます。

参照here。そして、コメントで指摘されているように、here

+4

文書:https://developer.mozilla.org/ja/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29 –

+1

Paul、@amateurについては、https:// developerを参照してください。 .mxilla.org/ja/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus) –

+12

難読化されたJavaScriptコンテストの人は誰ですか? –

11

単項演算子で、数値式を生成します。 d*1と同じになると私は信じている。

9

他の回答で説明したように、変数を数値に変換します。 dが数値であるか、数値に評価される関数の場合に特に便利です。 (問題のaddMonths機能を使用して)

例:

addMonths(function(){return x*y;}, 1, true); 
addMonths(34,1,true); 
addMonths("34",1,true); 

その後、+dは、すべての場合において数と評価されます。従って、dが数値か、関数か、数値に変換できる文字列であるかどうかによって、型をチェックし、異なるコードパスを取る必要性を回避する。

+0

'+ d 'は、最初の呼び出しの例であるaddMonthsが –

+0

の場合、数値に評価されません。これを書いたときに私が何をしたのか分かりません。 '+ function(){...}'は関数を評価しない 'NaN'を生成します – ecerulm