JavaScriptの演算子(一)
8278 ワード
演算子は、触れたばかりで「小さい」と感じるかもしれませんが、実際に触れてみると「多様」と「奇妙」が実感できます.
単項演算子
1要素の算術演算子は、個々の演算数に使用され、新しい値を生成します.javascriptでは、一元演算子は高い優先度を持ち、しかも右結合である.
1、1元加算と1元減
(1)、一元加算演算子はプラス記号(+)で表し、数値の前に置くと、数値には影響がありません.
1、加算演算子Javascriptの加算器は、バックグラウンドで異なるデータタイプを変換します.(1)、両方の動作数が数値である場合、通常の加算で計算します. String+String String+Object String+Number String+Boolean String+null String+undefined Number-String Number-Boolean Number-null Number-undefined Number-Object
単項演算子
1要素の算術演算子は、個々の演算数に使用され、新しい値を生成します.javascriptでは、一元演算子は高い優先度を持ち、しかも右結合である.
1、1元加算と1元減
(1)、一元加算演算子はプラス記号(+)で表し、数値の前に置くと、数値には影響がありません.
var num = 25;
num = +num; //25
数値以外に一元加算演算子を適用すると、Number()変換関数を呼び出してこの値を変換します.var s1 = '01';
var s2 = '1.1';
var s3 = 'z';
var s4=-1;
var b = false;
var f = 1.1;
var o = {
valueOf:function(){
return -1;
}
};
s1 = +s1; //1
s2 = +s2; //1.1
s3 = +s3; //NaN
s4 = +s4; //-1
b = +b; //0
f = +f; //1.1
o = +o; //-1
console.log(1+ +“2”+"3"); //33 +“2” , +"2” 2, 1+ +“2” 1+2 3. 3 , “33”
注意:new Date()の前に1元プラス記号を使用すると、日付文字列を日付ミリ秒に変換できます.console.log(new Date());//on Jul 11 2016 20:25:54 GMT+0800 ( )
console.log(+new Date());//1468239954076
(2)、1元演算子は主に負の数を表すために用いられます.1元の減算演算子が非数値に使用されると、この値はNumber()の変換関数を使って変換され、得られた数値は負に変換されます.var s1 = '01';
var s2 = '1.1';
var s3 = 'z';
var b = false;
var f = 1.1;
var o = {
valueOf:function(){
return -1;
}
};
s1 = -s1;//-1
s2 = -s2;//-1.1
s3 = -s3;//NaN
b = -b;//0
f = -f;//-1.1
o = -o;//1
, 。
2、前のインクリメント/前のインクリメントと後のインクリメント演算子+演算子は変数aの前に置くと、前のインクリメント演算子となります.変数aの後に置くと、後のインクリメンタル演算子となります.演算子は変数aの前に置くと、前の減算演算子となります.変数aの後に置くと、後の減算演算子となります.
var num=10;
a=num++;
console.log(num);// 11
console.log(a) ;// 10
console.log(num++); // 11
console.log(num); // 12
var bnum=10;
b = ++bnum;
console.log(bnum);// 11
console.log(b) ;// 11
console.log(++b); // 12
console.log(bnum); // 11
以上の比較から見れば、 / / , ;
/ , / 。
, ++, -- , , 。
一般的には、 var x = 1;
++x;
//
var x = 1;
x = x +1;
しかし+xはいつもx=x+1と同じではありません.+演算子は文字列接続操作をしないので、動作数を常に数字に変換して1を増やします. var x = '1';
++x;//2
var x = '1';
x = x + 1;//'11'
二項演算子1、加算演算子Javascriptの加算器は、バックグラウンドで異なるデータタイプを変換します.(1)、両方の動作数が数値である場合、通常の加算で計算します.
NaN, NaN。
-Infinity -Infinity, -Infinity。
Infinity -Infinity, NaN。
+0 +0, +0。
-0 +0, +0。
-0 -0, -0。
:
var a = 2;
console.log(a+NaN); //NaN NaN, NaN
( : NaN )
console.log("A"+"B"+3); //NaN “A” “B” Number , NaN, NaN NaN
console.log("A"+"B"+"3"); //NaN3 “A” “B” Number , NaN, “3”
console.log(Infinity+Infinity);//Infinity
console.log(Infinity+(-Infinity));//NaN
console.log((-Infinity)+(-Infinity));//Infinity
console.log((+0)+(+0));//+0
console.log((+0)+(-0));//+0
console.log((-0)+(-0));//-0
(2)操作数がある場合は文字列 ,
, ,
, , toString() , ( null,undefined)
一部の判例: var a = '10',
b = '20';
console.log(a+b); //1020
var a = '10',
b = {_key:20};
console.log(a+b); //10[object Object]
//Object.prototype.toString() 。
var a = '10',
b = 20;
console.log(a+b); //1020
var a = true,
b = '20';
console.log(a+b); //true20
var a = null,
b = '20';
c =3;
console.log(a+b); //null20
console.log(a+c); //3 null 0
var a = undefined,
b = '20';
console.log(a+b); //undefined20
console.log(undefined+3); //NaN
(3)、加算の独立動作var a = 10,
b = 5;
var result = 'hello world 10 + 5 = ' + a + b;
console.log(result); //'hello world 10 + 5 = 105'
var a = 10,
b = 5;
var result = 'hello world 10 + 5 = ' + (a + b);
console.log(result); //'hello world 10 + 5 = 15'
// ,undefined NaN,null 0,false 0,true 1/
console.log(undefined + undefined);//NaN
console.log(null + null);//0
console.log(false + false);//0
console.log(true + true);//2
// ,undefined 'undefined',null 'null',false 'false',true 'true'
console.log('' + undefined);//'undefined'
console.log('' + null);//'null'
console.log('' + false);//'false'
console.log('' + true);//'true'
// valueOf()
console.log(1 + []);//1
var o = {
valueOf: function(){
return -1;
}
}
console.log(1 + o);//0
//
console.log(1 + {});//'1[object Object]'
console.log(1 + [1,2]);//'11,2'
console.log(1 + new Date());//'1Thu Jun 16 2016 10:27:13 GMT+0800 ( )'
console.log(1 + /0/);//'1/0/'
2、減算演算子(1)、両方の操作数が数値である場合、通常の減算で計算します. NaN, NaN。
Infinity Infinity, NaN。
-Infinity -Infinity, NaN。
Infinity -Infinity, Infinity。
-Infinity Infinity, -Infinity。
+0 +0, +0。
-0 -0, -0。
+0 -0, +0。
, NaN。
, , 。
console.log(2-NaN); //NaN NaN, NaN
console.log(Infinity-Infinity); //NaN
console.log(-Infinity-(-Infinity)); //NaN
console.log(Infinity-(-Infinity)); //Infinity
console.log(-Infinity-Infinity); //-Infinity
console.log(+0 - (+0)); //+0
console.log(-0 - (+0)); //-0
console.log(-0 - (-0)); //+0
(2)一つの操作数があれば数値ではない ` `,` `,`null`,`undefined`, `Number()` , 。
, `valueOf()` 。 NaN, NaN。 valueOf() , toString() , .
var a = 10,
b = '10';
console.log(a-b); //0
var a = 10,
b = '';
console.log(a-b); //10
var a = 10,
b = 'true',
c = 'false';
console.log(a-b); //NaN
console.log(a-c); //NaN
//Number('true') => NaN Number('false') => NaN
// Number('false') == NaN Number('false') === NaN
// console.log(NaN == NaN) => false
Number() , :
1. ( ) ;
2. , ;
3. 16 , ;
4. , 0;
5. , NaN
var a = 10,
b = true,
c = false;
console.log(a-b); //9
console.log(a-c); //10
var a = 10,
b = null;
console.log(a-b); //10
var a = 10,
b = undefined;
console.log(a-b); //NaN
var a = 10,
b = {_key:1};
console.log(a-b); //NaN
console.log(1 - {});//NaN
console.log(1 - [1,2]);//NaN
console.log(1 - /0/);//NaN
console.log(1 - []);//1
3、乗算演算子は2つの数値の積を計算するために使用され、Number()変換関数により非数値タイプを数値またはNaNに変換します.+ Infinity * 0; //NaN
- Infinity * 0; //NaN
Infinity * 0 ; //Infinity -Infinity
Infinity * Infinity; //Infinity
4、除算演算子は、第一操作数を第二操作数で割った演算を行い、Number()変換関数により非数値タイプを数値またはNaNに変換します.Infinity / Infinity; //NaN
0 / 0; //NaN
0 / 0; //Infinity -Infinity
Infinity / 0; //Infinity
Infinity / 0 ; //Infinity
5、モジュラス演算子の求め方(剰余)操作子は百分号(%)で表され、最初の操作数を第二の操作数で割った余りです.//r ,n ,d ,
//q , n/d , n/d , n d
r = n - (d * q)
モデルの結果を求めて、最初の操作数のシンボルと一致しています.console.log(5 % 2);//1
console.log(5 % -2);//1
console.log(-5 % 2);//-1
console.log(-5 % -2);//-1
除数されるのはInfinityで、あるいは除数は0で、モデルの結果を求めるのはNaNです.Infinity % 0 = NaN
Infinity % Infinity = NaN
Infinity % 0 = NaN
0 % 0 = NaN
多くのプログラミング言語では、演算子は整数だけを操作数として受け入れるが、ECMAScriptでは浮動小数点の操作数も受け付けているが、浮動小数点は正確な値ではないので、完全に正確な結果を得ることができない.console.log(6.5 % 2.1);//0.19999999999999973