変数の前のプラス記号の目的は何ですか?


262

これは本当に簡単な質問のように聞こえますが、検索することができませんでした。何+d

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

手段?



3
同じ問題ですが、他のページのタイトルは、このように一般的なケースを説明していません
ジオセオリー

回答:


312

+オペレータは、物体の数値表現を返します。したがって、あなたの特定のケースでは、それがdゼロ以外の数であるかどうかのifを予測しているように見えます。

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




どちらがより効率的か、関数parseIntを使用して文字列を整数に解析するか、またはプラス演算子を使用するのですか?
acarlstein

1
どう違うの.parseInt()
ダニエルW.

1
答えのMDNリンクの@acarlstein:「単項否定(-)も非数値を変換できますが、単項プラスは、数値に対して他の演算を実行しないため、何かを数値に変換する最も速く好ましい方法です。」(「公式」の回答のみ)
AN

22

これは、数値式を生成する単項「+」演算子です。と同じd*1だと思います。


12

他の回答で説明されているように、変数を数値に変換します。dが数値または文字列のいずれかである場合に特に役立ちます 関数 これは数値に評価されます。

例(addMonths質問の関数を使用):

addMonths(34,1,true);
addMonths("34",1,true);

次に、+dすべてのケースで数値が評価されます。したがって、型かどうかをチェックし、d数値、関数、または数値に変換できる文字列のいずれであるかに応じて異なるコードパスを取得する必要性を回避します。


+daddMonthsの最初の呼び出し例では、数値に評価されません
Gus Crawford

確かに、これを書いたときに何をしたかわかりません。関数を評価しない+function(){...}を生成NaNします
RubenLaguna 2017年

4
クレイジーを削除するためにあなたの答えを編集できますか?それはかなり混乱しています。
Buh Buh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.