JavaScriptで= + _演算子が何を意味するのか疑問に思っていました。割り当てを行うようです。
例:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
r = +_;
+
は、_
が数値にキャストしようと試みます。_
は変数名であり(演算子ではありません)、a
、foo
などになります。例:
+"1"
「1」を純粋な数値1にキャストします。
var _ = "1";
var r = +_;
r
は1
ではなく"1"
になりました。
さらに、 算術演算子のMDNページ :
単項プラス演算子は、そのオペランドの前にあり、そのオペランドに評価されますが、まだない場合は数値に変換しようとします。 [...]整数と浮動小数点の文字列表現、および文字列以外の値
true
、false
、およびnull
を変換できます。 10進数と16進数("0x"
- prefixed)形式の両方の整数がサポートされています。負の数がサポートされています(16進数ではありません)。特定の値を解析できない場合、NaN
に評価されます。
また、
単項プラスは、何かを数値に変換する最も高速で優先される方法です
代入演算子ではありません。
_
は、関数に渡される単なるパラメーターです。
hexbin.radius = function(_) {
// ^ It is passed here
// ...
};
次の行でr = +_;
+
infrontはその変数(_
)を数値または整数値にキャストし、変数r
に割り当てます
+=
演算子と混同しないでください
=+
は実際にはtwo演算子=
は割り当てであり、+
および_
は変数名です。
好む:
i = + 5;
or
j = + i;
or
i = + _;
私の次のコードは、=+
を使用してstringをint。
例:
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回行いました。
=+
ではありません。 JavaScriptでは、+
は数値に変更することを意味します。
+'32'
は32を返します。
+'a'
はNaNを返します。
したがって、isNaN()
を使用して、数値に変更できるかどうかを確認できます。
それは卑劣なものです。
ここで理解すべき重要なことは、ここでは下線文字実際には変数名であり、演算子ではないことです。
その前のプラス記号は、アンダースコアの正の数値を取得しています。つまり、アンダースコア変数を事実上intにキャストしています。 parseInt()
でも同じ効果を得ることができますが、ここではプラス記号のキャストがより簡潔であるため使用される可能性があります。
そして、これは単に等号を単なる標準変数割り当てとして残します。
おそらくdeliberatelyではありません。混乱を招くように書かれているのは、経験豊富なJavascriptプログラマーが一般にアンダースコアを変数として認識するためです。しかし、それが間違いなく非常に混乱していることを知らない場合。確かにそのようには書きません。私は、せいぜい意味のない短い変数名のファンではありません-スペースを節約するためにJSコードの短い変数名が必要な場合は、ミニファイヤを使用します。短い変数で始めないでください。
= + _は_を数値にキャストします。
そう
var _ = "1",
r = +_;
console.log(typeof r)
番号を出力します。
r = +_;
を意味すると思いますか?その場合、パラメーターのNumber
への変換です。 _
が「12.3」だとすると、+'12.3'
は12.3
を返します。したがって、引用文では、+_
がr
に割り当てられます。
_
は単なる関数名であり、関数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
左側の変数に新しい値を割り当てます。
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
簡単に言えば、+_
は 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と評価されます。
+_
は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
わずかな違い:
""
は0
に評価され、parseInt()はNaN
に評価されますこの式では:
r = +_;
_
は元々そうだったが「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
は読みやすい代替品です。