= +_演算子が 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.radius
function のパラメーターとして渡され、数値に+
キャストされる単なる変数名です。
あなたの関数と同じ例を作ってみましょう。
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
違いはほとんどありません:
""
は に評価され、0
parseInt() は に評価されますNaN