MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

特殊演算子

JavaScript は以下の特殊演算子があります。

条件演算子

条件演算子は JavaScript では唯一の 3 つのオペランドをとる演算子です。演算子は条件に基づいて 2 つの値のうち、1 つを選択します。構文は次のとおりです。

condition ? val1 : val2

condition が true の場合、演算子は val1 の値を選択します。そうでない場合は val2 の値を選択します。標準的な演算子が使用できる場所でならどこででも条件演算子を使用することができます。

例えば、

status = (age >= 18) ? "adult" : "minor"

この文では、age が 18 以上の場合 "adult" という値を変数 status に代入します。そうでない場合は "minor" という値を status に代入します。

コンマ演算子

コンマ演算子 (,) は単に両方のオペランドを評価し、第 2 のオペランドの値を返します。この演算子は主に for ループ内で使用されます。このことでループのたびに複数の変数を更新できるようになります。

例えば、a が一辺が 10 要素の 2 次元配列のとき、以下のコードではコンマ演算子を用いることで 2 変数を同時にインクリメントしています。このコードでは配列の対角成分の値を出力します。

for (var i=0, j=9; i <= 9; i++, j--)
   document.writeln("a["+i+"]["+j+"]= " + a[i][j])

delete

delete 演算子はオブジェクトやオブジェクトのプロパティ、配列の指定されたインデックスの要素を削除します。構文は以下のとおりです。

delete objectName
delete objectName.property
delete objectName[index]
delete property // with 文内でのみ有効

ここで、objectName はオブジェクトの名前を、property は既存のプロパティを、index は配列の要素の位置を表す整数をそれぞれ表しています。

4 番目の形式は with 文内でのみ有効で、これはあるオブジェクトからプロパティを削除します。

delete 演算子を使うことで暗黙的に宣言された変数を削除することができますが、var 文を用いて宣言された変数は削除できません。

delete 演算子が成功すると、そのプロパティや要素には undefined がセットされます。また、演算が可能な場合は delete 演算子は true を返します。演算が不可能な場合は false を返します。

x=42
var y= 43
myobj=new Number()
myobj.h=4      // プロパティ h を作成
delete x       // true を返す(暗黙的に宣言されているならば削除可能)
delete y       // false を返す(var 付きで宣言されているなら削除不可能)
delete Math.PI // false を返す(定義済みプロパティは削除不可能)
delete myobj.h // true を返す(ユーザ定義プロパティは削除可能)
delete myobj   // true を返す(暗黙的に宣言されているならば削除可能)

配列要素の削除
配列要素を削除したとき、配列の長さには影響を及ぼしません。例えば a[3] を削除したとき、a[4] は依然 a[4] のままで、a[3] は undefined になります。

delete 演算子で配列要素を除去すると、もうその要素はその配列からなくなります。次の例では tree[3] は delete によって除去されます。

trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
   // ここは実行されない
}

配列要素は存在させたいが、値は未定義にしたいという場合は、delete 演算子の代わりに undefined キーワードを使用してください。次の例では trees[3] には undefined という値が代入されますが、その配列要素は存在したままになります。

trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
if (3 in trees) {
   // ここは実行される
}

in

in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。構文は以下のとおりです。

propNameOrNumber in objectName

ここで、propNameOrNumber はプロパティ名か配列のインデックスを表す文字列式または数値式を、objectName はオブジェクトの名前をそれぞれ表しています。

次の例では in 演算子の使用法を示します。

// 配列
trees=new Array("redwood","bay","cedar","oak","maple")
0 in trees        // true を返す
3 in trees        // true を返す
6 in trees        // false を返す
"bay" in trees    // false を返す(インデックスの指す値ではなく、
                  // インデックスの数字を指定しなければならない)
"length" in trees // true を返す(length は Array のプロパティ)

// 定義済みオブジェクト
"PI" in Math          // true を返す
myString=new String("coral")
"length" in myString  // true を返す

// ユーザ定義オブジェクト
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar  // true を返す
"model" in mycar // true を返す

instanceof

instanceof 演算子は、指定されたオブジェクトが指定されたオブジェクトの種類である場合に true を返します。構文は次のとおりです。

objectName instanceof objectType

ここで、objectNameobjectType と比較するオブジェクトの名前を、objectTypeDateArray のようなオブジェクトの種類をそれぞれ表しています。

実行時にオブジェクトの種類を確認する必要があるときは instanceof を使用してください。例えば、例外を受け取るとき、投げられた例外の種類によって別々の例外を扱うコードに分岐させることができます。

例えば、次のコードでは instanceof を使用することで theDayDate オブジェクトであるかどうかを決定しています。theDayDate オブジェクトなので if 文の中の文は実行されます。

theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
   // 実行される文
}

new

new 演算子は、ユーザ定義オブジェクトや、ArrayBooleanDateFunctionImageNumberObjectOptionRegExpString といった定義済みオブジェクトのインスタンスを作成するのに使用します。サーバでは DbPoolLockFileSendMail といったオブジェクトも使用できます。new の使用法は以下のとおりです。

objectName = new objectType ( param1 [,param2] ...[,paramN] )

オブジェクト初期化子を使用してもオブジェクトを作成することができます。オブジェクト初期化子の使用 にて説明しています。

詳しくはコア JavaScript リファレンスの new 演算子 のページを参照してください。

this

this キーワードを使うことでカレントオブジェクトを参照することができます。一般に this はあるメソッド内でそのメソッドを呼び出したオブジェクトを参照します。使用法は以下のとおりです。

this[.propertyName]

例 1
あるオブジェクトの value プロパティの妥当性を確認する validate という関数を想定します。関数にはそのオブジェクトと、上限および下限の値を渡します。

function validate(obj, lowval, hival) {
   if ((obj.value < lowval) || (obj.value > hival))
      alert("Invalid Value!")
}

各フォーム要素の onChange イベントハンドラにおいて validate を呼び出します。this を使うことでフォーム要素を渡すことができます。次の例をご覧ください。

<B>Enter a number between 18 and 99:</B>
<INPUT TYPE = "text" NAME = "age" SIZE = 3
   onChange="validate(this, 18, 99)">

例 2
form プロパティと組み合わせると this でカレントオブジェクトの親のフォームを参照できます。次の例では、myForm というフォームに Text オブジェクトとボタンが格納されています。ユーザがボタンをクリックすると、Text オブジェクトの値にフォーム名がセットされます。ボタンの onClick イベントハンドラは this.form を利用して親のフォームである myForm を参照します。

<FORM NAME="myForm">
Form name:<INPUT TYPE="text" NAME="text1" VALUE="Beluga">
<P>
<INPUT NAME="button1" TYPE="button" VALUE="Show Form Name"
   onClick="this.form.text1.value=this.form.name">
</FORM>

typeof

typeof 演算子は次の方法のうち、どちらかの方法で使用します。

1. typeof operand
2. typeof (operand)

typeof 演算子は、未評価のオペランドの型を指す文字列を返します。operand は返される型を調べる対象となる文字列、変数、キーワード、オブジェクトです。括弧はあってもなくてもかまいません。

以下の変数を定義することを想定します。

var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()

typeof 演算子はこれらの変数に対して以下の結果を返します。

typeof myFun is function
typeof shape is string
typeof size is number
typeof today is object
typeof dontExist is undefined

truenull というキーワードに対して、typeof 演算子は以下の結果を返します。

typeof true is boolean
typeof null is object

数値や文字列に対して、typeof 演算子は以下の結果を返します。

typeof 62 is number
typeof 'Hello world' is string

プロパティ値に対して、typeof 演算子はプロパティ値の型を返します。

typeof document.lastModified is string
typeof window.length is number
typeof Math.LN2 is number

メソッドや関数に対して、typeof 演算子は以下の結果を返します。

typeof blur is function
typeof eval is function
typeof parseInt is function
typeof shape.split is function

定義済みオブジェクトに対して、typeof 演算子は以下の結果を返します。

typeof Date is function
typeof Function is function
typeof Math is function
typeof Option is function
typeof String is function

void

void 演算子は次の方法のうち、どちらかの方法で使用します。

1. void (expression)
2. void expression

void 演算子は値を返さずに評価する式を指定します。expression は評価する JavaScript の式です。式の周りの括弧はあってもなくてもかまいませんが、使用したほうが見た目はいいです。

void 演算子を使用することで式をハイパーテキストリンクとして指定することができます。式は評価されますが、開いている文書の代わりに読み込まれるということはありません。

以下のコードはユーザがクリックしても何も起こらないハイパーテキストリンクを作成します。ユーザがリンクをクリックすると void(0) は undefined に評価され、JavaScript としては影響を及ぼしません。

<A HREF="javascript:void(0)">Click here to do nothing</A>

以下のコードはユーザがクリックするとフォームが送信されるハイパーテキストリンクを作成します。

<A HREF="javascript:void(document.form.submit())">
Click here to submit</A>

ドキュメントのタグと貢献者

 このページの貢献者: ethertank, happysadman, Electrolysis, Mgjbot
 最終更新者: ethertank,