第51週のまとめ - オブジェクトトラバーサルメソッド

<= リターン


オブジェクトを反復するためのメソッド

オブジェクト内のキー値を走査する
オブジェクト内のプロパティは、文字列と記号の 2 つのタイプに分けられます。
文字列とシンボル以外の型を使用すると、それらはすべて文字列になります。

var objProp = {}
var obj = {
  [objProp]: 'obj'
}
console.log(obj);//{ '[object Object]': 'obj' }

  1. さまざまな種類のパラメーターを持つオブジェクトを作成する
var obj = {
  str: 'str-value',
  [Symbol()]: 'Symbol()-value'
}
// defineProperty方法可以直接再一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象。
//定义一个不可枚举属性
Object.defineProperty(obj, 'unenum', {
  value: '不可枚举unenum',
  writeable: true,//是否可以被赋值运算符改变
  enumerable: false,//是否出现在枚举属性中
  configurable: true//是否可以改变和删除
})
//定义一个不可枚举属性
Object.defineProperty(obj, Symbol('unenum'), {
    value: '不可枚举Symbol("unenum")-value',
    writeable: true,
    enumerable: false,
    configurable: true
})
//在对象的原型上添加属性
Object.setPrototypeOf(obj, { foo: '原型bar-value', [Symbol('foo')]: '原型Symbol("foo")-value' })

上記のコード入力 obj は次のとおりです。
[外部リンクの画像転送に失敗しました。ソース サイトにはアンチ リーチング メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Ur589o1E-1661955777441)(…/image/Interview- index-1.png)] ;

  1. Object.keys()/Ojbect.values()/Object.entries()
    これら 3 つのメソッドは、オブジェクトのプロパティのコレクションにのみアクセスできます。ただし、obj 自体の列挙可能な文字列プロパティのみを処理します。
    Object.keys() はキー値を取得し、Ojbect.values() は値の値を取得し、Object.entries() はキー値の値を取得します。
console.log(Object.keys(obj));//[ 'str' ]
console.log(Object.values(obj));//[ 'str-value' ]
console.log(Object.entries(obj));//[ [ 'str', 'str-value' ] ]

  1. Object.getOwnPropertyNames()
    は、オブジェクト自体のプロパティ コレクションを取得でき、列挙不可能なものを含む、それ自体のすべての文字列プロパティのキー値を処理できますが、Symbol プロパティおよびプロトタイプより上のプロパティを処理できません。
console.log(Object.getOwnPropertyNames(obj));//[ 'str', 'unenum' ]

  1. Object.getOwnPropertySymbols() は、
    オブジェクト自体のプロパティ コレクションを取得でき、列挙不可能なものを含む、それ自体のすべての Symbol プロパティのキー値を処理できますが、文字列プロパティとプロトタイプより上のプロパティを処理できません。
console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(), Symbol(unenum) ]

  1. Reflect.ownKeys(obj) は
    、Object.getOwnPropertyNames()+Object.getOwnPropertySymbols() と見なすことができます。これは、列挙できないものを含め、すべての独自の文字列プロパティと Symbol プロパティのキー値を返しますが、プロパティを返すことはできません。プロトタイプの上。
console.log(Reflect.ownKeys(obj));//[ 'str', 'unenum', Symbol(), Symbol(unenum) ]

  1. for...in は、
    それ自体とそのプロトタイプ チェーンのすべての列挙可能な文字列プロパティのキー値を返します。ただし、列挙不可能なプロパティと Symbol プロパティのキー値は除きます。
for(let prop in obj){
  console.log(prop);//str -> foo
}

Object.keys()/Ojbect.values()/Object.entries() は for...in と hasOwnProperty を併用することで実現できます
hasOwnProperty は、オブジェクト自体が特定のプロパティ、つまり特定のキーを持っているかどうかを判断するものです価値。

for (let prop in obj) {
  if (obj.hasOwnProperty(prop)) {
    //{ key: 'str', value: 'str-value', pair: [ 'str', 'str-value' ] }
    console.log({ key: prop, value: obj[prop], pair: [prop, obj[prop]] })
  }
}

おすすめ

転載: blog.csdn.net/qq_51965698/article/details/126633507