JavaScript 第5版 - 5章 式と演算子(1)

JavaScript 第5版、「5章 式と演算子」の「5.1 式」~「5.5 関係演算子」(59~69ページ)を読み進めていきます。

JavaScriptの演算子はC言語と似ていますが、JavaScriptに特有の演算子、バグやセキュリティ上の脆弱性の原因になりうるものを中心にまとめていきます。

5.2 演算子の概要

60ページの「表5-1 JavaScriptの演算子」に演算子の優先順位、結合性、オペランドの型、説明がまとめられています。

5.3 算術演算子

  • 除算演算子(/)でのゼロ除算は正か負の無限大になるが、0 / 0NaNになる。

5.4 等値演算子

5.4.1 等値演算子(==)と同値演算子(===)

  • 同値演算子(===)でもNaN同士は同一とは判定されない。NaNかどうかを調べるにはisNaN()グローバル関数を使う。
  • 等値演算子(==)で2つの値の型が異なる場合、次のルールに基づいて判定される。
    • 一方がnullで他方が未定義値(undefined)の場合は等しいと判定する。
    • 一方が文字列か文字列に変換されるもので、他方が数値か数値に変換されるものの場合、文字列は数値に変換してから比較される。
    • 一方がtrueの場合、true1に変換してから比較される。一方がfalseの場合、false0に変換してから比較される。
    • 一方がオブジェクトで他方が数値か文字列の場合、オブジェクトは基本型に変換してから比較される

オブジェクトから基本型への変換については、「JavaScript 第5版 - 3章 データ型と値(6) 」でまとめています。

5.4.2 不等演算子(!=)と非同値演算子(!==)

それぞれ、等値演算子(==)と同値演算子(===)の逆になります。

5.5 関係演算子

5.5.1 比較演算子

  • 比較は数値と文字列のどちらかの形式で行われる。
  • 両方のオペランドが文字列か文字列に変換されるものの場合、Unicodeの文字コード値を基にアルファベット順で比較される。
  • 一方のオペランドが文字列か文字列に変換されるもので、他方が数値か数値に変換されるものの場合、文字列は数値に変換してから比較される。変換できない文字列はNaNとなり、比較結果はfalseとなる。
  • オペランドがオブジェクトで数値か文字列に変換可能な場合、オブジェクトは数値に変換してから比較される。変換できない場合の比較結果はfalseとなる。

比較演算子を使った文字列の比較では、比較にUnicodeの文字コード値が使われるという点で注意が必要です。ASCIIの範囲内では大文字は小文字より小さいと判定されます。ロケール固有のアルファベットを考慮した文字列の比較にはString.localeCompare()メソッドを使います。

5.5.2 in演算子

  • 左側の値が右側のオブジェクトのプロパティ名であればtrueを返す。
  • 左側のオペランドは文字列か文字列に変換されるもの、右側のオペランドはオブジェクト(配列を含む)でなければならない。

5.5.3 instanceof演算子

  • 左側のオブジェクトが右側のクラスのインスタンスであればtrueを返す。
  • 左側のオペランドはオブジェクト、右側のオペランドはクラス名(コンストラクタ関数の名前)でなければならない。
  • 左側のオペランドがオブジェクトでない場合、右側のオペランドがコンストラクタ関数を表すオブジェクトでない場合はfalseを返す。
  • 右側のオペランドがオブジェクトでない場合はエラーが発生する。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/56/trackback/
この記事のURI
http://dxd8.com/archives/56/