= +_演算子が JavaScript で何を意味するのか疑問に思っていました。課題をやっているようです。
例:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
= +_演算子が 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"。
単項プラス演算子は、そのオペランドの前に置かれ、そのオペランドに評価されますが、まだ数値になっていない場合は、数値に変換しようとします。[...]整数と浮動小数点数の文字列表現、および文字列以外の値
true、false、およびを変換できますnull。10 進数と 16 進数 ("0x"-prefixed) の両方の形式の整数がサポートされています。負の数がサポートされています (ただし、16 進数はサポートされていません)。特定の値を解析できない場合は、 と評価されNaNます。
また、
単項プラスは、何かを数値に変換する最も高速で好ましい方法です
代入演算子ではありません。
_関数に渡される単なるパラメーターです。
hexbin.radius = function(_) {
// ^ It is passed here
// ...
};
次の行では、その変数 ( ) を数値または整数値にr = +_; +キャストし、変数に代入します。_r
+=オペレーターと混同しないでください
=+実際には2 つの演算子=は代入であり+、 _変数名です。
お気に入り:
i = + 5;
or
j = + i;
or
i = + _;
私の次のコードは、文字列 をint=+に変換するための使用法を示すのに役立ちます。
例:
y = +'5'
x = y +5
alert(x);
出力10
使用:したがって、それ以外の場合yは intです:5=+
y = '5'
x = y +5
alert(x);
出力55
as_は変数です。
_ = + '5'
x = _ + 5
alert(x)
出力10
さらに、~ (if string is int string (float will be round of to int) )
でも同じことを達成できることを知っておくと興味深いでしょう。
y = ~~'5' // notice used two time ~
x = y + 5
alert(x);
10も出力します
~ビットごとの NOT : オペランドのビットを反転します。マグニチュードの変化がないために2回行いました。
卑劣なものです。
理解しておくべき重要なことは、ここでの下線文字は実際には変数名であり、演算子ではないということです。
その前のプラス記号は、アンダースコアの正の数値を取得しています。つまり、アンダースコア変数を効果的にintにキャストしています。で同じ効果を得ることができますが、parseInt()より簡潔であるため、ここではプラス記号のキャストが使用される可能性があります。
そして、それは等号を単なる標準の変数代入として残すだけです。
経験豊富なJavascriptプログラマーは一般にアンダースコアを変数として認識するため、混乱させるように意図的に書かれているわけではありません。しかし、それが間違いなく非常に混乱していることを知らない場合。私は確かにそれをそのように書くことはしません。私は、意味のない短い変数名が好きではありません。スペースを節約するためにJSコードで短い変数名が必要な場合は、ミニファイアを使用してください。そもそも短い変数で書かないでください。
そうではありません=+。JavaScript では、+数値に変換することを意味します。
+'32'32 を返します。
+'a'NaN を返します。
したがってisNaN()、数値に変更できるかどうかを確認するために使用できます。
= +_ は _ を数値にキャストします。
そう
var _ = "1",
r = +_;
console.log(typeof r)
番号を出力します。
私はあなたが意味すると思いますr = +_;か?その場合、それはパラメータの への変換ですNumber。_'12.3' と言うと、+'12.3'が返されます12.3。したがって、引用文+_では に割り当てられrます。
_hexbin.radiusfunction のパラメーターとして渡され、数値に+キャストされる単なる変数名です。
あなたの関数と同じ例を作ってみましょう。
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 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ください。
経験値:
parseFloat(2.4) = 2.4
vs
parseInt(2.4) = 2
vs
+"2.4" = 2.4
経験値:
var _ = "3";
_ = +_;
console.log(_); // will show an integer 3
違いはほとんどありません:
""は に評価され、0parseInt() は に評価されますNaN