ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript学習ノート:オブジェクト(1):オブジェクトの使い方と性質_基礎知識
false.toString(); // 'false' [1, 2, 3].toString(); // '1,2,3' function Foo(){} Foo.bar = 1; Foo.bar; // 1
よく誤解されるのは、数値定数はオブジェクトとみなされないということですが、実際には、数値定数もオブジェクトとしてみなすことができます。これは、Javascript パーサーがドット演算子を解析する際に誤りを犯し、ドット演算子を浮動小数点特性として扱うためです。
2.toString(); // SyntaxError が発生します
実際には、数値定数をオブジェクトとして動作させる方法はたくさんあります。
2..toString(); // the second point is correctly recognized 2 .toString(); // note the space left to the dot (2).toString(); // 2 is evaluated first
データ型としてのオブジェクト
JavaScript のオブジェクトは、主にキーと値の対応関係を含むハッシュ テーブルとして使用できます。
{} 記号を使用して単純なオブジェクトを作成します。この新しいオブジェクトは Object.prototype から継承され、独自のプロパティは含まれません。
var foo = {}; // a new empty object // a new object with a 'test' property with value 12 var bar = {test: 12};
オブジェクトのプロパティへのアクセス
JavaScript オブジェクトにアクセスするには、ドット演算子と角かっこ演算子 [] の 2 つの方法を使用できます。
var foo = {name: 'kitten'} foo.name; // kitten foo['name']; // kitten var get = 'name'; foo[get]; // kitten foo.1234; // SyntaxError foo['1234']; // works
2 つの演算子の効果はほぼ同じです。唯一の違いは、括弧演算子では属性を動的に設定できることと、属性名に構文エラーが含まれる可能性があることです。 (上の例の 3 番目の状況は説明済みです)
オブジェクトの属性を削除します
属性を削除する唯一の方法は、delete を使用することです。属性値を未定義または null に設定すると、属性に関連付けられた値が削除されるだけで、実際には属性自体は削除されません。
var obj = { bar: 1, foo: 2, baz: 3 }; obj.bar = undefined; obj.foo = null; delete obj.baz; for(var i in obj) { if (obj.hasOwnProperty(i)) { console.log(i, '' + obj[i]); } }
上記の出力では、bar unknown と foo null が出力されますが、実際に削除されるのは baz だけです。
ここで注意すべき点は、delete では削除できるのは属性のみであり、変数は削除できないことです。したがって、変数を定義するときは常に var キーワードを使用して変数を宣言する必要があります。 var を書かないと、変数がグローバル オブジェクトに対して作成された新しい属性として誤って認識されるためです。
この例では、答えが非常に明確に示されています。a は変数であり、b はグローバル オブジェクトの単なるプロパティです。
名前付きオブジェクトのプロパティ
var test = { 'case': 'I am a keyword, so I must be notated as a string', delete: 'I am a keyword, so me too' // raises SyntaxError };
オブジェクトのプロパティには、通常の文字または文字列を使用して名前を付けることができます。また、JavaScript パーサーの設計のバグにより、上記の例の 2 番目の表現は ECMAScript 5 でエラーをスローします。
エラーの理由は、delete がキーワードであるため、古いバージョンの Javascript パーサーに適応させるために文字列定数を使用して名前を付ける必要があるためです。