演算子
演算子は、プログラムにおけるデータや変数(オペランド)の代入や四則計算、比較などといったデータ操作を行うためシンボルです。JavaScriptはオブジェクト指向ですので、オブジェクトに関する演算子も含まれています。
JavaScript では数値はすべて 64 ビット長の浮動小数点数として扱われます。
数学的な計算についてはMath
ページを参照してください。
算術演算子
算術演算子は四則計算(加減乗除)と余り、Increment(1つずつ足す)、Decrement(1つずつ引く)です。四則計算の結果が和、差、積、商となります。
演算子 | 概要 |
---|---|
+ | 加、Addition |
- | 減、Subtraction |
* | 乗、Multiplication |
/ | 除、Division |
% | 余り、Modulus |
++ | インクリメント |
-- | デクリメント |
インクリメント、デクリメントについては以下のようになっています。
記述例 | 説明 |
---|---|
++X | 前置インクリメント。式の値は1を加えた値 |
X++ | 後置インクリメント。式の値は1を加えた前の値 |
--X | 前置デクリメント。式の値は1を引いた値 |
X-- | 後置デクリメント。式の値は1を引いた前の値 |
for 文の繰り返しといった 0 値または初期値も評価する必要がある場合は、後置インクリメント X++ を使用します。
ブロック中の最後にインクリメント、デクリメントを行う場合は前置インクリメント ++X になります。
+
は文字列の連結にも使用することができます。詳しくは文字列の連結について
ページを参照してください。
代入演算子
結果を左辺に代入します。
= | y=x xの値をyに代入 |
+= | y+=x y=y+x |
-= | y-=x y=y-x |
*= | y*=x y=y*x |
/= | y/=x y=y/x |
%= | y%=x y=y%x |
複数の代入がある場合は右から代入されていきます。
let x, y; x = y = 100 // x、y ともに 100 になる
上記の例では、x、y ともに 100 になります。右から代入されていくからです。
比較演算子
比較演算子は、左右の値を比較し同じならtrueまたはビット1を立てる。左右違うならfalse、0(ゼロ)とする。
比較演算子 | 概説 |
---|---|
等価演算子 | |
== | 等しい |
!= | 等しくない(等しくないことがtrue) |
厳密等価演算子 | |
=== | 値とデータタイプが等しい |
!== | 値が等しくないかタイプが等しくない |
関係演算子 | |
> | より大きい(左辺が右辺より大きい) |
< | より小さい(左辺が右辺より小さい) |
>= | 以上(左辺が右辺以上) |
<= | 以上(左辺が右辺以下) |
===
や !==
は厳密等価演算子と呼ばれます。 ==
や !=
と比べてデータタイプも評価に入り、より厳密な比較になります。
厳密等価演算子は値を比較するために型変換を行わなければなりませんが、プログラムの解説では ===
や !==
といった厳密等価演算子の使用を勧めていることがあります。
論理演算子
論理演算子とは、論理積(AND)、論理和(OR)、論理否定(NOT)をいいます。
論理演算子は true または false である論理値 Boolean を評価します。
2つの論理値から、論理積(AND)、論理和(OR)、論理否定(NOT)を計算します。
複数を連結でき、優先順位がある(NOT→AND→OR?)。
論理演算子 | 概要 |
---|---|
&& | 論理積(AND) |
|| | 論理和(OR) |
! | 論理否定(NOT) |
プログラム言語の多くは 1 以上を true 0 以下を false としています。これはコンピューターの 1 と 0 の2進数から来ています。
1 が true、 0 が false から論理積(AND)、論理和(OR)、論理否定(NOT)を評価すると以下のようになります。
論理積(AND)の答えは、2つの論理値の掛け算になります。分かりやすいように 0 と 1 で計算します。
a | b | a ✕ b |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
1 が true で、0 が false です。どちらかが false なら答えは常に false です。両方とも true のときのみが true になることが分かります。
論理和(OR)の答えは、2つの論理値の足し算になります。
a | b | a + b |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
今度は足し算です。1 + 1 は 2 ですが、2進数の1桁目だけをみるので 1 です。どちらかが true なら答えは常に true です。両方とも false のときのみが false になることが分かります。
最後に論理否定(NOT)になります。これは指定値の反対になります。指定値が true なら false、false なら true になります。
a | !a |
---|---|
1 | 0 |
0 | 1 |
論理積(AND)は 1*1=1, 1*0=0, 0*1=0, 0*0=0、どちらも true で true。論理和(OR)は1+1=1, 1+0=1, 0+1=1, 0+0=0、どちらか true で true となります。
論理値 Boolean についてはBoolean
ページを参照してください。
短絡評価
論理演算子と計算式、インクリメント、デクリメント、代入、関数を併記しないようにします。先の評価で false があると2つ目以降の計算は行われません。
( a === false ) && ( x++ > 5 ) // x++ は計算されない
これは短絡評価と呼ばれるもので、先に false があるとそれ以降は評価しません。このことは自動で行われます。
ビット演算子
JavaScriptは32bitで計算されます。そのために結果は32bitで計算され数値として出力されます。例では簡単に4bitとしています。
& | AND ( 0101 AND 0001 ---> 0001 ) |
| | OR ( 0101 AND 0001 ---> 0101 ) |
^ | XOR ( 0101 ^ 0001 ---> 0100 ) |
~ | NOT ( ~0001 ---> 1110 ) |
<< | Left shift ( 0101 << 1 ---> 1010 ) |
>> | Right shift ( 0101 >> 1 ---> 0010 ) |
文字列演算子
文字列を連結する方法です。
+ | 'abc' + 'def' ---> 'abcdef' |
+= | x = 'abc'; x += 'def'; ---> 'abcdef' |
特殊演算子
簡潔な比較演算子である条件演算子、データタイプを返す typeof 演算子、関数定義を宣言する function 演算子、なんら処理を実行しないようにする void 演算子の解説です。
条件演算子、三項演算子
条件(condition)、trueの返り値、falseの返り値の3つのオペランドをとる演算子です。この演算子は、if文の簡易としてよく用いられます。
(condition ? ifTrue : ifFalse)
typeof 演算子
変数または値のデータタイプを取得できます。
typeof 'abc' //'string'
必ずしも良好な結果が返ってくるわけではないようです。例えば、null や [] はobject
が返ってくることがあります。
バグがあるかもしれないことを留意しておいたほうがよいようです。
function 演算子
関数を定義するための演算子です。関数定義を参照して下さい。
var onefunction = function( param1, param2 ) { ... };
void 演算子
引数を評価し未定義として undefined 返します。引数以外の実行は行われませんので、Event処理を実行したくない場合によく用いられます。
<a href="javascript:void( 0 );"> リンクを実行しない </a>
カンマ演算子
複数の計算式を並べることができます。
ただし、代入される値はひとつです。
let x = 0, y = 100, z; z = x, y; console.log( z ); // 0 が表示される
上記の例は、表示されるのは 0 で x の値のみが代入されます。
カッコで括ると最後の式の値が代入されます。
let x = 0, y = 100, z; z = ( x, y ); console.log( z ); // 100 が表示される
オブジェクトに関する演算子
. 演算子
メンバ演算子。オブジェクトのプロパティやメソッドへアクセスができます。
function City( cityName, population ) = { this.cityName = cityName; this.population = population; }
this 演算子 (this)
オブジェクト自身を示すスコープです。関数の呼び出され方でスコープするオブジェクトが変わりますので思った動作と違う場合があります。
function City( cityName, population ) = { this.cityName = cityName; this.population = population; }
new 演算子
new 演算子は、コンストラクター関数を持ったオブジェクトまたは定義したオブジェクトのインスタンスを生成します。
function City( cityName, population ) = { this.cityName = cityName; this.population = population; } const city001 = new City("San Francisco", 85.3);
super 演算子
super 演算子は、オブジェクトの親の関数を取得します。
in 演算子
in 演算子は、オブジェクトにプロパティが存在しているかをbool値で取得します。
var city = [{cityName:"San Francisco", population:85.3}, {cityName:"New York", population:818.6}, {cityName:"Tokyo", population:927.3}]; "cityName" in city // 'true' "length" in city // 'true' (length is an Array property) "San Francisco" in city // 'false' (not property)
[] 演算子
配列を定義することに用いられます。これも演算子です。
let list_ = [ "a","b","c","d","e" ];
delete 演算子
delete 演算子は、オブジェクトからプロパティを削除するのに使います。プロパティの削除するのと同時に値も削除しますので、エラーの原因になるかもしれませんので注意が必要です。
var city = [{cityName:"San Francisco", population:85.3, color:"blue"}, {cityName:"New York", population:818.6 color:"green"}, {cityName:"Tokyo", population:927.3, color:"red"}]; delete city.color;
instanceof 演算子
instanceof 演算子は、オブジェクトが引数のインスタンス(データ型)かをbool値で取得できます。
var city = ["San Francisco", "New York", "Tokyo"]; city instanceof Array; // 'true' city instanceof String; // 'false'