web-dev-qa-db-ja.com

JavaScriptで= + _はどういう意味ですか

JavaScriptで= + _演算子が何を意味するのか疑問に思っていました。割り当てを行うようです。

例:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};
249
Dimitry
r = +_;
  • +は、_が数値にキャストしようと試みます。
  • _は変数名であり(演算子ではありません)、afooなどになります。

例:

+"1"

「1」を純粋な数値1にキャストします。

var _ = "1";
var r = +_;

r1ではなく"1"になりました。

さらに、 算術演算子のMDNページ

単項プラス演算子は、そのオペランドの前にあり、そのオペランドに評価されますが、まだない場合は数値に変換しようとします[...]整数と浮動小数点の文字列表現、および文字列以外の値truefalse、およびnullを変換できます。 10進数と16進数("0x"- prefixed)形式の両方の整数がサポートされています。負の数がサポートされています(16進数ではありません)。特定の値を解析できない場合、NaNに評価されます。

また、

単項プラスは、何かを数値に変換する最も高速で優先される方法です

392
mpm

代入演算子ではありません。

  • _は、関数に渡される単なるパラメーターです。

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
    
  • 次の行でr = +_;+ infrontはその変数(_)を数値または整数値にキャストし、変数rに割り当てます

+=演算子と混同しないでください

95
Starx

=+は実際にはtwo演算子=は割り当てであり、+および_は変数名です。

好む:

i = + 5;
or 
j = + i;
or 
i = + _;

私の次のコードは、=+を使用してstringint
例:

y = +'5'
x = y +5
alert(x);

出力1

se:ここでyはint 5であるため=+であるため
それ以外の場合:

y = '5'
x = y +5
alert(x);

出力55

_は変数です。

_ = + '5'
x = _ + 5
alert(x)

出力1

さらに~(文字列がint文字列(floatはintに丸められます)

y = ~~'5'  // notice used two time ~
x = y  + 5
alert(x);

1も出力します

~はビット単位NOTです。オペランドのビットを反転します。マグニチュードに変化がなかったために2回行いました。

54
Grijesh Chauhan

=+ではありません。 JavaScriptでは、+は数値に変更することを意味します。

+'32'は32を返します。

+'a'はNaNを返します。

したがって、isNaN()を使用して、数値に変更できるかどうかを確認できます。

16
Ovilia

それは卑劣なものです。

ここで理解すべき重要なことは、ここでは下線文字実際には変数名であり、演算子ではないことです。

その前のプラス記号は、アンダースコアの正の数値を取得しています。つまり、アンダースコア変数を事実上intにキャストしています。 parseInt()でも同じ効果を得ることができますが、ここではプラス記号のキャストがより簡潔であるため使用される可能性があります。

そして、これは単に等号を単なる標準変数割り当てとして残します。

おそらくdeliberatelyではありません。混乱を招くように書かれているのは、経験豊富なJavascriptプログラマーが一般にアンダースコアを変数として認識するためです。しかし、それが間違いなく非常に混乱していることを知らない場合。確かにそのようには書きません。私は、せいぜい意味のない短い変数名のファンではありません-スペースを節約するためにJSコードの短い変数名が必要な場合は、ミニファイヤを使用します。短い変数で始めないでください。

16
SDC

= + _は_を数値にキャストします。

そう

var _ = "1",
   r = +_;
console.log(typeof r)

番号を出力します。

12
Harsha Ivaturi

r = +_;を意味すると思いますか?その場合、パラメーターのNumberへの変換です。 _が「12.3」だとすると、+'12.3'12.3を返します。したがって、引用文では、+_rに割り当てられます。

9
KooiInc

_は単なる関数名であり、関数hexbin.radiusのパラメーターとして渡され、+はそれを数値にキャストします

あなたの関数のような例を作りましょう。

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}

このサンプル関数を実行します。

hexbin.radius( "1");

1 string
1 number false 

hexbin.radius(1);

1 number
1 number false

hexbin.radius([]);

[] object
0 number false

hexbin.radius( 'a');

a string
NaN number true

hexbin.radius({});

Object {} object
NaN number true

hexbin.radius(true);

true boolean
1 number false
6
rab

左側の変数に新しい値を割り当てます。

var a=10;
var b="asg";
var c=+a;//return 10
var d=-a;//return -10
var f="10";

var e=+b;
var g=-f;

console.log(e);//NAN
console.log(g);//-10
5
Amrendra

簡単に言えば、+_Number()を使用するのと同等です コンストラクター。

実際、日付でも機能します:

var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000

デモ: http://jsfiddle.net/dirtyd77/GCLjd/


より多くの情報も見つけることができます MDN-単項プラス(+)セクション

単項プラス演算子は、オペランドの前に置かれ、オペランドに評価されますが、まだオペランドになっていない場合は、数値に変換しようとします。単項否定(-)も非数値を変換できますが、単項プラスは、数値に対して他の演算を実行しないため、何かを数値に変換する最も速く推奨される方法です。整数および浮動小数点の文字列表現、および非文字列値true、false、およびnullを変換できます。 10進数と16進数(「0x」で始まる)形式の両方の整数がサポートされています。負の数がサポートされています(16進数ではありません)。特定の値を解析できない場合、NaNと評価されます。

3
Dom

+_parseFloat(_)のほぼと同等です。 parseIntはドットなどの数字以外の文字で停止しますが、parshFloatは停止しません。

EXP:

    parseFloat(2.4) = 2.4 
vs 
    parseInt(2.4) = 2 
vs 
    +"2.4" = 2.4

経験:

var _ = "3";
    _ = +_;

console.log(_); // will show an integer 3

わずかな違い:

3
Brian

この式では:

r = +_;
  • ここで、「+」は、右オペランドの値convertを試みる単項演算子として機能します。オペランドではなく、評価された値を変換します。そのため、_は元々そうだったが「1」のままですが、rは純粋な数値になります。

数値変換に+を適用するかどうか、これらのケースを考慮してください

+"-0" // 0, not -0
+"1" //1
+"-1" // -1
+"" // 0, in JS "" is converted to 0
+null // 0, in JS null is converted to 0
+undefined // NaN
+"yack!" // NaN
+"NaN" //NaN
+"3.14" // 3.14

var _ = "1"; +_;_ // "1"
var _ = "1"; +_;!!_ //true
var _ = "0"; +_;!!_ //true
var _ = null; +_;!!_ //false

とはいえ、それは最速の数値コンバーターですので、それを利用するのであれば、使いすぎることはほとんどお勧めしません。 parseInt/parseFloatは読みやすい代替品です。

2