blog

JavaScriptのデータ型 - オブジェクト

オブジェクトは、キーと値のペアの順序なしのコレクションです。...

Jun 6, 2020 · 4 min. read

I. オブジェクトは複雑なデータ型です。

他の6つの単純データ型

  • number
  • boolean
  • symbol
  • null
  • undefined

定義

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

Writeメソッド

  • let obj = {'name':'lu','age':18}
  • let obj = new Object({'name':'lu'}) 通常の書き方は
  • console.log({'name':'lu','age':18}) 匿名オブジェクトを直接出力します。

詳細

キー名は文字列のみ、任意の文字を含めることができ、その転置カンマは、識別子のルールに従うように命名規則の省略後に、省略することができますが、型はまだ文字列です

例をあげる

var obj = {
	100:'888';
}

オブジェクトobjのキーの引用符が省略され、数字001ではなく文字列'100'になっています。

プロパティ名

各キーはオブジェクトのプロパティ名で、以下は特殊なプロパティ名です。

let obj = { 1:'a', 3.2:'b', 1e2:true, //1e2=1*e-2:true, .234:true, 0xFF:true, }; Object.keys(obj) //オブジェクトのkey

出力:['1','100','255','3.2','0.01','0.234']

属性値

undefinedはその値が存在しないことを意味し、nullはその値が存在するがnullであることを意味します。

変数を属性名として使用するには?

let a = 'name'; let obj = {a:100}; //ここで定義されているオブジェクトのキーは、実際には'a' let obj = {[a]:100}; //ここで定義されているオブジェクトのキーは、変数aの値である。'name'

のない属性名は自動的に文字列に変換され、[]付きは変数を評価します。

オブジェクトの隠された特性

  • JSのすべてのオブジェクトはhiddenプロパティを持っています。
  • この隠し属性の値には、すべての共有属性を格納する新しいオブジェクトを指すアドレスが格納され、この新しいオブジェクトはプロトタイプと呼ばれます。

次に、オブジェクト属性の追加、削除、およびチェックです。

属性の削除

以下の両メソッドは、オブジェクトobjのxxxプロパティを削除します。

  • delete obj.xxx
  • delete obj['xxx'] //文字列であることを証明するために xxx をシングルクォートで囲んでいることに注意してください。
  • 'xxx' in obj //falseの場合、objのxxx属性の削除が成功したことを証明します。
  • obj.hasOwnProperty('xxx') // xxxがobj自身のプロパティかどうかを判定します。

deleteと===undefined

  • obj.xxxを削除 属性全体を削除します。属性はもはや存在しません。objの'xxx'を使用して、属性objにまだ'xxx'属性名があるかどうかを判断します。
  • obj.xxx === undefined //objにxxx属性があるかどうかに関係なくtrueを返します。

物件検索

すべての物件を見る

  • Object.keys(obj) オブジェクトobjのすべての属性のキーを表示します。
  • console.dir(obj) オブジェクトobjの全属性+共通属性をディレクトリとして表示

個々の物件を見る

  • 中かっこ構文:obj['key']
  • ポイント構文:obj.key
  • 落とし穴を避ける:obj[key]の書き間違え

自分の属性を変更または増加

値を代入して自身の属性を直接変更

  • let obj = {name:'lu'}; ここでnameは文字列です。
  • obj.name = 'lu' または obj['name'] = 'lu' ここで name は文字列です。

プロパティの一括変更

Object.assign(obj,{age:18,gender:'man'});

共有属性の変更または追加

共有属性の追加や変更ができない

  • let obj={},obj2={} //この時点で、objとobj2は同じ共有属性を持ちます。
  • obj.toString='xxx' //objのtoString共通属性を変更しようとすると、実際には、プロトタイプのtoString属性をオーバーライドしないtoString独自属性が追加されます。
  • obj2とobjのプロトタイプには、toString属性が残っています。
  • プロトタイプを変更しない

非表示プロパティの変更

Object.createの推奨使用法

  • オブジェクトが作成されると同時に、非表示の属性を変更します。 let obj = Object.create(common);
  • 次に、obj.name = 'lu'というキーと値のペアをオブジェクトに追加します;
  • または、一括追加、Object.assign(obj,{name:'lu',age:'18'});

III.プロトタイプ

すべてのオブジェクトにはプロトタイプがあります。

  • obj.__proto__は、オブジェクトobjのプロトタイプのアドレスを保持します。
  • オブジェクト obj のプロトタイプもオブジェクトです。
  • このオブジェクトは、toString/constructor/valueOfなど、オブジェクトobjに共通するすべてのプロパティを保持します。

オブジェクトのプロトタイプもオブジェクトです。

  • オブジェクトのすべてのプロトタイプもプロトタイプを持ちますが、このプロトタイプの値はnullを指すため、このプロトタイプはルート・オブジェクトとなります。
Read next

Array.fill()を使ってオブジェクトを埋める際の問題点

これではうまくいかないので、mapを使ってデータを埋めます。 最終的な解決策は、まず配列の各項目をnullで埋めて、配列が長さだけでなくデータ項目を持つようにし、次にmapを使って各項目をnewObject()で置き換えます。

Jun 5, 2020 · 1 min read

js_tree_structure_to_nested_structure

Jun 3, 2020 · 1 min read

WebAssemblyの初見

Jun 2, 2020 · 2 min read