JavaScript のすべての変数は、null と未定義の 2 つの例外を除いてオブジェクトです。
false.toString(); false'
[1, 2, 3].toString(); // '1,2,3'
関数 Foo(){}
Foo.bar = 1;
Foo.bar ; // 1
よくある誤解は、数値リテラルはオブジェクトではないということです。これは、ドット演算子を浮動小数点リテラル値の一部として解析しようとする JavaScript パーサーのバグが原因です。
2.toString(); // エラー: 構文エラー
数値リテラルをオブジェクトのように見せるための回避策は数多くあります。
2..toString(); // 2 つ目 ドット記号は正常に解析できます
2 .toString() // ドット記号の前のスペースに注意してください
(2).toString(); // 2 が最初に計算されます
データ型としてのオブジェクト
JavaScript オブジェクトはハッシュ テーブルとして使用でき、主に名前付きキーと値の間の対応関係を保存するために使用されます。
単純なオブジェクトは、オブジェクト リテラル構文 {} を使用して作成できます。この新しく作成されたオブジェクトは Object.prototype を継承しており、カスタム プロパティはありません。
var foo = {}; empty object
// 値が 12 のカスタム属性 'test' を持つ新しいオブジェクト
var bar = {test: 12};
プロパティにアクセスする
オブジェクトのプロパティにアクセスするには、ドット演算子または括弧演算子の 2 つの方法があります。
foo.name; // 子猫
foo['name'] // 子猫
var get = 'name';
foo[get]; >
foo.1234; // SyntaxError
foo['1234']; // 動作します
2 つの構文は同等ですが、次の 2 つの構文でも角括弧演算子は機能します。有効な場合 - 動的に設定された属性 - 属性名が有効な変数名ではありません (翻訳者注: たとえば、属性名にスペースが含まれているか、属性名が JS キーワードです)
翻訳者注: JSLint 構文検出ツールでは、ドット演算子を使用することをお勧めします。
属性を削除
プロパティを削除する唯一の方法は、削除演算子を使用することです。プロパティを未定義または null に設定しても、実際にはプロパティは削除されず、プロパティと値の間の関連付けが削除されるだけです。
コードをコピー
bar : 1,
foo: 2,
baz: 3
};
obj.bar = 未定義;
obj.foo = null;
obj.baz を削除;
for(var i in obj) {
if (obj.hasOwnProperty(i)) {
console.log(i, '' obj[i]);
}
}
上記の出力には、bar 未定義と foo null が含まれています。実際に削除されるのは baz のみであるため、出力からは消えます。
属性名の構文
コードをコピー
コードは次のとおりです。var test = { 'case ': ' 私はキーワードなので文字列として表記する必要があります',
delete: '私もキーワードなので私' // エラー: SyntaxError
};
オブジェクトの属性名は、文字列または通常の文字を使用して宣言できます。ただし、JavaScript パーサーの別の設計が間違っているため、上記の 2 番目の宣言メソッドは ECMAScript 5 より前に SyntaxError をスローします。
このエラーの理由は、delete が JavaScript 言語のキーワードであるため、以前のバージョンの JavaScript エンジンで正常に実行するには、文字列リテラル宣言を使用する必要があるためです。