演算子

[up] [prev] [next]

■ 一覧

&&, &=, &, ~, | , ^, , , ? :, --, --, /=, /, ==, ===, >, >=, ++, ++, <<=, <<, <, <=, -=, -, %, %=, *=, *, !=, !==, ^=, ! , ||, |=, +=, +, >>=, >>, =, >>>=, >>>

■ 代入演算子

var = exp (e3/N2)

変数 var に値 exp を代入します。イコール(=)は等しいという意味ではなく代入するという意味を持ちます。

xx = 5;      // xx に 5 が代入される
yy = xx;     // yy に xx の値(= 5)が代入される
zz = "ABC";  // zz に文字列"ABC"が代入される

例えば、次の例を数学的に解釈すると「解無し」となってしまいますが、JavaScript ではこれを「xx という変数に、xx の値と 2 を足したものを代入する」という意味になります。あらかじめ xx に 5 が代入されていれば、xx は 7 となります。

xx = xx + 2:  // xx には xx に 2 を加えた値が代入される

次の例で、「yy = xx = 5;」は、「yy = (xx = 5);」と解釈されます。ここで、「xx = 5」自体が代入された値を示すので。これにより、変数 yy にも値 5 が代入されることになります。

yy = xx = 5;   // yy と xx に 5 が代入される

■ 算術演算子

exp1 + exp2 (e3/N2)
exp1 - exp2 (e3/N2)
exp1 * exp2 (e3/N2)
exp1 / exp2 (e3/N2)
exp1 % exp2 (e3/N2)

exp1exp2 の足し算、引き算、掛け算、割り算を行います。演算子 % は、exp1exp2 で割った余りを返します。

xx = 3 + 2;   // xx には 5 が代入される
xx = 3 - 2;   // xx には 1 が代入される
xx = 3 * 2;   // xx には 6 が代入される
xx = 3 / 2;   // xx には 1.5 が代入される
xx = 3 % 2;   // xx には 1 が代入される

演算子 + を用いるときは注意が必要です。exp1exp2 のどちらか(もしくは両方)が文字列の場合は、算術演算子ではなく、文字列の連結演算子として機能するからです。例えば、次の例では、xx は 127 になりません。

xx = "123" + 4;   // xx には "1234" が代入される

フォームに入力した値も文字列として扱われるので注意しましょう。フォームの値を数値として扱いたいときは、0 を減算してやるとよいようです。演算子 - は算術演算子としての機能しかないので、"123" から 3 を引いても "12" にはならず、120 になります。

<script type="text/javascript">
<!--
function func() {
    alert(document.F1.T1.value + 4);        // "1234" になる
    alert((document.F1.T1.value - 0) + 4);  // 127 になる
}
// -->
</script>
<form name="F1" action="#">
<input type="text" name="T1">
<input type="button" value="OK" onclick="func()">
</form>
var++ (e3/N2)
++var (e3/N2)
var-- (e3/N2)
--var (e3/N2)

xx++ は xx の値をひとつ増やします。xx-- は xx の値をひとつ減らします。xx++ は、加算する前の値を返し、++xx は加算の後の値を返します。xx-- と --xx も同様です。

a = 5; a++:     // a の値は 6 となる
a = 5; b = a++; // a の値は 6、b の値は 5 となる
a = 5; b = ++a; // a の値は 6、b の値は 6 となる

■ 比較演算子

exp1 == exp2 (e3/N2)
exp1 != exp2 (e3/N2)

== 演算子は、exp1exp2 と等しければ true(真)、さもなくば false(偽)を返します。!= 演算子は、exp1exp2 が等しくなければ true(真)、さもなくば false(偽)を返します。数値にも文字列にも使用可能です。

if (xx == 5) {
    alert("xx is five.");
}
if (yy != "ABC") {
    alert("yy is not ABC.");
}

数値と文字列を比較する場合は注意が必要です。次の例では、通常、数値と文字列が適切に型変換されてtrue(真)となりますが、Netscape ブラウザで <script>タグに language="JavaScript1.2" を指定した時は、数値と文字列の型変換が行われず、false(偽)を返します。

if ("123" == 123) {
    alert("等しい");
}
exp1 < exp2 (e3/N2)
exp1 <= exp2 (e3/N2)
exp1 > exp2 (e3/N2)
exp1 >= exp2 (e3/N2)

exp1exp2 の大きさを比較してその結果を true(真)または false(偽)で返します。演算子はそれぞれ、より小さい(<)、以下(<=)、より大きい(>)、以上(>=)を意味します。

if (xx < 123) {
    alert("xx は 123 より小さいです。");
}

これらの演算子を文字列に対して使用した場合は、辞書順の前後比較を行います。

if (xx < "H") {
    alert("xx は H よりも前にあります。");
}
exp1 === exp2 (e4/N406)
exp1 !== exp2 (e4/N406)

数値と文字列を比較したときに、== 演算子や != 演算子が暗黙の型変換を行うのに対し、=== 演算子や !== 演算子は数値と文字列は常に異なるものと判断します。

if ( 123  ==   123 ) { ... }    // true(真)
if ("123" ==  "123") { ... }    // true(真)
if ("123" ==   123 ) { ... }    // true(真)
if ( 123  ==  "123") { ... }    // true(真)
if ( 123  ===  123 ) { ... }    // true(真)
if ("123" === "123") { ... }    // true(真)
if ("123" ===  123 ) { ... }    // false(偽)
if ( 123  === "123") { ... }    // false(偽)

■ 論理演算子

exp1 && exp2 (e3/N2)

exp1 が真、かつ、exp2 が真であれば真を、さもなければ偽を返します。下記の例では、mon が 1 以上であり、かつ、mon が 12 以下の時に真となります。

if ((1 <= mon) && (mon <= 12)) {
    alert("xx is between 1 and 12.");
}
exp1 || exp2 (e3/N2)

exp1 が真、または、exp2 が真であれば真を返します。下記の例では、xx が "ABC" である、または、xx が "abc" である場合に真となります。

if ((xx == "ABC") || (xx == "abc")) {
    alert("xx is ABC.");
}
!exp1 (e3/N2)

exp1 が真ではない時に真を返します。

if (!(xx == 5)) {
    alert("xx is not five.");
}

■ 条件演算子

exp1 ? exp2 : exp3 (e3/N2)

exp1 が真であれば exp2 を、さもなくば exp3 を返します。次の例は xx が 5 以上であれば "big"、さもなくば "small" を yy に代入します。

yy = (xx >= 5) ? "big" : "small";

■ カンマ演算子

exp1, exp2 (e3/N2)

常に exp2 の値を返します。ただし、代入演算子(=など)よりも優先度が低いため、xx = 1, 2; は (xx = 1), 2; と解釈されるので注意してください。また、関数の引数にカンマ(,)を用いた場合は、カンマ演算子とは解釈されません。

for (i = 0, j = 0; i < 10; i++) {
    :
}

■ ビット演算子

exp1 & exp2 (e3/N2)
exp1 | exp2 (e3/N2)
exp1 ^ exp2 (e3/N2)
~exp1 (e3/N2)

exp1exp2 を4バイト整数と見なして、それぞれ、AND(&)、OR(|)、XOR(^)、NOT(~)演算を行った結果を返します。

xx = 0x87654321 & 0xffff0000;  // xx には 0x87650000 が代入される
xx = 0x87654321 | 0xffff0000;  // xx には 0xffff4321 が代入される
xx = 0xffff0000 ^ 0xff00ff00;  // xx には 0x00ffff00 が代入される
xx = ~0xffff0000;              // xx には 0x0000ffff が代入される
exp1 << exp2 (e3/N2)
exp1 >> exp2 (e3/N2)
exp1 >>> exp2 (e3/N2)

exp1 を4バイト整数と見なして、exp1exp2 ビット分、左シフト(<<)、右シフト(>>)、0埋め右シフト(>>>)した結果を返します。>> の場合は左端には最上位のビットが埋められますが、>>> は常に 0 が埋められます。

xx = 0x12345678 << 8;  // xx には 0x34567800 が代入される
xx = 0x12345678 >> 8;  // xx には 0x00123456 が代入される
xx = 0x87654321 >> 8;  // xx には 0xff876543 が代入される
xx = 0x87654321 >>> 8; // xx には 0x00876543 が代入される

■ 複合代入演算子

var += exp (e3/N2)
var -= exp (e3/N2)
var *= exp (e3/N2)
var /= exp (e3/N2)
var %= exp (e3/N2)
var &= exp (e3/N2)
var |= exp (e3/N2)
var ^= exp (e3/N2)
var <<= exp (e3/N2)
var >>= exp (e3/N2)
var >>>= exp (e3/N2)

例えば、xx += 5; は xx = xx + 5; と同じような動作をします。同様に、xx -= 5; は xx = xx - 5; と同じような動作をします。

xx += 5;    // xx = xx + 5; と同じ
xx -= 5;    // xx = xx - 5; と同じ
xx *= 5;    // xx = xx * 5; と同じ
xx /= 5;    // xx = xx / 5; と同じ
xx %= 5;    // xx = xx % 5; と同じ
xx &= 0xff; // xx = xx & 0xff; と同じ
xx |= 0xff; // xx = xx | 0xff; と同じ
xx ^= 0xff; // xx = xx ^ 0xff; と同じ
xx <<= 8;   // xx = xx << 8; と同じ
xx >>= 8;   // xx = xx >> 8; と同じ
xx >>>= 8;  // xx = xx >>> 8; と同じ

■ 演算子の優先順位

各演算子の優先順位は以下のようになります。同じレベルの演算子は、式の左側にある方が優先度が高くなります。たとえば下記の例で、(式1) は (式2) と解釈されて答えは 13 となります。しかし、バグを埋め込まないためにも、優先順位が直感的に解らない個所には(たとえ無駄であっても)括弧をつけて、優先度を明示的に指定してやることをおすすめします。

(式1) xx = 3 + 4 * 5 / 2;
(式2) xx = 3 + ((4 * 5) / 2);
優先度演算子
高い



低い
配列([]) 括弧(( ))
増減(++ --) マイナス(-) 反転(~) NOT(!)
乗除余(* / %)
加減(+ -) 文字列連結(+)
シフト(<< >> <<<)
比較(< <= >= >)
比較(== != === !==)
AND(&)
XOR(^)
OR(|)
かつ(&&)
または(||)
二項(? :)
代入(=) 複合代入(+=など)
カンマ(,)

[up] [prev] [next]
Copyright (C) 1996-2001 杜甫々
改訂版初版:2001年9月8日
http://www.tohoho-web.com/js/operator.htm