blog

javascriptオブジェクトの基本

オブジェクトは、キーと値のペアのコレクションであり、順序付けされていない複合データセットです。以下の参考文献のほとんどは、学習ノートを使うためだけのものです。 1、オブジェクトのキー名は、すべてのキー...

Oct 3, 2020 · 4 min. read
シェア

オブジェクトは、キーと値のペアのコレクションであり、順序付けされていない複合データセットです。

以下のほとんどはruanyifeng.comからの引用であり、学習メモとしてのみ使用されています。

キー名

オブジェクトのキー名はすべて文字列なので、引用符をつけてもつけなくてもかまいません。キー名が数値の場合は、自動的に文字列に変換されます。

var obj = {
 1: 'a',
 3.2: 'b',
 1e2: true,
 1e-2: true,
 .234: true,
 0xFF: true
};
obj
// Object {
// 1: "a",
// 3.2: "b",
// 100: true,
// 0.01: true,
// 0.234: true,
// 255: true
// }
obj['100'] // true

キー名が識別名として適格でなく、数字でもない場合は、引用符で囲む必要があります。

//  
var obj = {
 1p: 'Hello World'
};
//  
var obj = {
 '1p': 'Hello World',
 '11': 'Hello World', 
 111: 'Hello World', //111 文字列への自動変換'h w': 'Hello World',
 'p+q': 'Hello World'
};

オブジェクトの各キー名は「プロパティ」とも呼ばれ、その「キー値」はどのようなデータ型でもかまいません。プロパティの値が関数である場合、そのプロパティはしばしば「メソッド」と呼ばれ、関数のように呼び出すことができます。

var obj = { p: function (x) { return 2 * x; } }; obj.p(1) // 2

プロパティの値がまだオブジェクトの場合、チェーン参照が形成されます。

var o1 = {};
var o2 = { bar: 'hello' };
o1.foo = o2;
o1.foo.bar // "hello"

オブジェクトの参照

異なる変数名が同じオブジェクトを指している場合、それらはすべてそのオブジェクトへの参照、つまり同じメモリーアドレスを指していることになります。変数の1つを変更すると、他のすべての変数に影響します。

var o1 = {};
var o2 = o1;
o1.a = 1;
o2.a // 1
o2.b = 2;
o1.b // 2

この時点では、変数が元のオブジェクトに再参照されても、別の変数には影響しません。

var o1 = {};
var o2 = o1;
o1 = 1;
o2 // {}

しかし、このような参照はオブジェクトに限られ、2つの変数が同じプリミティブ型の値を指している場合、変数はその時点で両方とも値のコピーとなります。この場合、変数は両方ともその時点の値のコピーです。

var x = 1;
var y = x;
x = 2;
y // 1

、属性操作

読む

ドット演算子を使う方法と角括弧演算子を使う方法があります。

var obj = { p: 'Hello World'
};
var foo = p;obj.p // "Hello World"
obj['p'] // "Hello World"
obj[foo] // "Hello World"

存在しないプロパティを削除してもエラーは報告されず、true が返されます。

削除するとエラーが報告されます。

delete

削除できるのはオブジェクト自身のプロパティだけで、継承されたプロパティは削除できません。

var obj = {}; delete obj.p // true var obj = Object.defineProperty({}, 'p', { value: 123, configurable: false }); obj.p // 123 delete obj.p // false var obj = {}; delete obj.toString // true obj.toString // function toString() { [native code] }

オブジェクト自身のすべてのプロパティを見るには、**Object.keys** メソッドを使用します。

**Object.keys **

var obj = {
 key1: 1,
 key2: 2
};
Object.keys(obj);
// ['key1', 'key2']

in

オブジェクトがプロパティを含むかどうかのチェック

var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true

for  

ループは、オブジェクトのすべてのプロパティを繰り返し処理するために使用されます。

var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
 console.log(obj[i]);
}
//オブジェクトのプロパティ名を取り出す例
var obj = {
 x: 1,
 y: 2
};
var props = [];
var i = 0;
for (var p in obj) {
 props[i++] = p
}
props // ['x', 'y']
  • この走査は、オブジェクトのすべての走査可能なプロパティに対して行われ、走査不可能なプロパティはスキップされます。
  • オブジェクト自身のプロパティだけでなく、継承されたプロパティも走査します。

オブジェクトはtoStringプロパティを継承しますが、for.....inループはこのプロパティを繰り返し処理しません。

var obj = {}; // toString プロパティが存在する obj.toString // toString() { [native code] } for (var p in obj) { console.log(p); } // 出力はない

オブジェクト自身のプロパティだけをたどるには、hasOwnPropertyメソッドを

var person = { name: ' ' };
for (var key in person) {
 if (person.hasOwnProperty(key)) {
 console.log(key);
 }
}
// name

with

同じオブジェクトの複数のアトリビュートを操作する際の記述の利便性を提供します。

// 例1 既存のプロパティにのみ値を割り当てることができる。
var obj = {
 p1: 1,
 p2: 2,
};
with (obj) {
 p1 = 4;
 p2 = 5;
 p3 = 6
}
obj.p1 = 4;
obj.p2 = 5;
obj.p3//undefined
// 例2 読み方
with (document.links[0]){
 console.log(href);
 console.log(title);
 console.log(style);
}
//  
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style);
Read next

Git コミットメッセージの書式

変更履歴には、新機能、バグ修正、後方互換性のない変更の 3 つのセクションを使用します。 リリース時に、これら3つのセクションの内容をスクリプトで生成し、関連するコミットにリンクすることができます。 もちろん、スクリプトが生成したスケルトンに基づいて、実際のリリースでCHANGELOGの内容を手動で編集することも可能です。 いくつかのフォーマットの変更(追加/削除...

Oct 3, 2020 · 6 min read