Hatena::Groupmnemonic

きおく屋めがねばし

2013-04-01

「4章 式と演算子」

Expressions and Operators

JavaScript インタプリタ評価して値を生成できるものを式と呼びます。


An expression is a phrase of JavaScript that a JavaScript interpreter can evaluate to produce a value.

単純な式を組み合わせて複雑な式を構成できます。例えば、配列にアクセスする式は、評価すると配列になる式の後に、開き角括弧、評価すると整数になる式、閉じ角括弧を記述します。そして、この新たに作成された複雑な式を評価すると、指定された配列の、指定されたインデックスに格納された値になります。同じように、関数呼び出しの式は、評価すると関数オブジェクトになる式と、関数の引数として使われる式から構成されます。

単純な式から複雑な式を構成するときに使われるのが演算子です。


「4.1 単項式」

Primary Expressions

Primary expressions in JavaScript are constant or literal values, certain language keywords, and variable references.

リテラルとは、プログラム中に直接埋め込まれた定数値です。


Literal are constant values that are embedded directly in your program.

Some of JavaScript's reserved words are primary expressions:

true   // Evaluates to the boolean true value
false  // Evaluates to the boolean false value
null   // Evaluates to the null value
this   // Evaluates to the "current" object

*2 *3

最後に紹介する単項式は、変数参照です。例をいくつか示します。

i          // 変数 i の値に評価される。
sum        // 変数 sum の値に評価される。
undefined  // undefined はグローバル変数。null とは異なりキーワードではない。

プログラム中に識別子が現れた場合、JavaScript は変数と認識し、値を検索します。該当する名前の変数が存在しない場合、式は undefined 値に評価されます。ただし、ECMAScript 5 の Strict モードでは、存在しない変数を評価しようとすると ReferenceError 例外がスローされます。


When any identifier appears by itself in a program, JavaScript assumes it is a variable and looks up its value. If no variable with that name exists, the expression evaluates to the undefined value. In the strict mode of ECMAScript 5, an attempt to evaluate a nonexistent variable throws a ReferenceError instead.


「4.2 オブジェクトと配列の初期化子」

Object and Array Initializers

オブジェクトと配列初期化子は、新たに生成されるオブジェクトや配列の値となる式のことです。

配列初期化子は、カンマで区切った式のリストを角括弧で囲んだものです。配列初期化子の値は、新たに生成された配列になります。この配列の要素は、カンマで区切られた式の値に初期化されます。例を示します。

[]         // 空の配列。角括弧中に式がない場合、要素がないことを意味する
[1+2,3+4]  // 要素を 2 つ持つ配列。最初の要素が 3 に、2 つ目の要素が 7 になる。

配列初期化子中の要素の式として、配列初期化子を記述してもかまいません。この場合、入れ子になった配列が生成されます。

var matrix = [[1,2,3],[4,5,6],[7,8,9]];

The element expressions in an array initializer are evaluated each time the array initializer is evaluated. This means that the value of an array initializer expression may be different each time it is evaluated.

未定義の要素を配列リテラル中に含めたい場合は、カンマの中の値を省略してください。例えば、次の例の配列は、要素を 5 つ持ちますが、うち 3 つの要素は未定義の要素になります。

var sparseArray = [1,,,,5];

配列初期化子の最後の式の後にカンマを 1 つ記述してもかまいません。この場合は、未定義要素は作成されません。


A single trailing comma is allowed after the last expression in an array initializer and does not create an undefined element.

オブジェクト初期化子は、配列初期化子と同じような書式ですが、角括弧の代わりに中括弧を使い、各式の前にはプロパティ名とコロンを記述します。例を示します。

var p = { x:2.3, y:-1.2 };  // 2 つのプロパティを持つオブジェクト。
var q = {};                 // プロパティを持たない空のオブジェクト。
q.x = 2.3; q.y = -1.2;      // これで、q は p と同じプロパティを持つ。

Object literals can be nested. For example:

var rectangle = { upperLeft:  { x: 2, y: 2 },
                  lowerRight: { x: 4, y: 5 } };

オブジェクト初期化子が評価されるたびに、オブジェクト初期化子の中の式も評価されます。この式には、定数だけでなく、任意の JavaScript 式が記述できます。また、オブジェクトリテラルのプロパティ名は識別子でなく文字列です。プロパティ名として予約語が使えたり、識別子として適切ではない文字列も使えたりするので、この仕様は便利です。

var side = 1;
var square = { "upperLeft":  { x: p.x, y: p.y },
               'lowerRight': { x: p.x + side, y: p.y + side }};

The expressions in an object initializer are evaluated each time the object initializer is evaluated, and they need not have constant values: they can be arbitrary JavaScript expressions. Also, the property names in object literals may be strings rather than identifiers (this is useful to specify property names that are reserved words or are otherwise not legal identifiers):


「4.3 関数定義式」

Function Definition Expressions

関数定義式は、一般的には、function キーワードに続いて、カンマで区切って 0 個以上の識別子 (仮引数名) を丸括弧中に記述し、中括弧中に JavaScript コードブロック (関数本体) を記述します。


A function definition expression typically consists of the keyword function followed by a comma-separated list of zero or more identifiers (the parameter names) in parentheses and a block of JavaScript code (the function body) in curly braces. For example:

// This function returns the square of the value passed to it.
var square = function(x) { return x * x; }

関数定義式には関数名を記述できます。関数は、関数定義式の代わりに、関数文を使って定義することもできます。


「4.4 プロパティアクセス式」

Property Access Expressions

プロパティアクセス式が評価されると、オブジェクトプロパティの値、または、配列の要素の値になります。

  • オブジェクトプロパティ*4

JavaScript defines two syntaxes for property access:

expression . identifier
expression [ expression ]

The first style of property access is an expression followed by a period and an identifier. The expression specifies the object, and the identifier specifies the name of the desired property. The second style of property access follows the first expression (the object or array) with another expression in square brackets. This second expression specifies the name of the desired property or the index of the desired array element. Here are some concrete examples:

var o = {x:1,y:{z:3}};  // An example object
var a = [o,4,[5,6]];    // An example array that contains the object
o.x                     // => 1: property x of expression o
o.y.z                   // => 3: property z of expression o.y
o["x"]                  // => 1: property x of object o
a[1]                    // => 4: element at index 1 of expression a
a[2]["1"]               // => 6: element at index 1 of expression a[2]
a[0].x                  // => 1: property x of expression a[0]

トラックバック - http://mnemonic.g.hatena.ne.jp/paragramma/20130401