JavaScript 객체 속성의 존재성 및 열거성

열거성: 속성이 대상의 속성 열거에 나타날지 여부입니다.
존재성: 대상에 이 속성이 존재하는지 여부
이름상으로 볼 때 우선 이 대상이 이 대상에 존재해야만 매거할 수 있는지, 즉 존재성>매거형을 고려할 수 있다.
다음 코드의 결과를 생각해 보십시오.
var myObject = {
    a:undefined
}
console.log(myObject.a); //?
console.log(myObject.b); //?

당신은 이미 답이 있다고 믿습니다. 두 속성 값은 모두 undefined입니다. 그러나 대상 속성의 존재성과 매거성은 대상 속성이어야 하는데 속성 값을 말할 이유가 없습니까?myObject.amyObject.b 모두undefined였다.차이점: a는 대상 속성으로 존재하고 속성 값undefined이지만 대상에서 b의 동명 속성을 찾지 못했기 때문에 심지어 원형 체인에도 존재하지 않을 수도 있고 되돌아왔다undefined.그러면 이 두 가지 상황을 구분해 볼까요?즉 우리가 대상에 어떤 속성이 존재하는지 어떻게 판단하는가이다.
var myObject ={
 a:2   
};
console.log( 'a' in myObject);// true
console.log( 'b' in myObject);// false
console.log(myObject.hasOwnProperty('a'));//true
console.log(myObject.hasOwnProperty('b'));//false
for(var prop in myObject){
    if(prop==='a') console.log(true;)
} //true
Object.getOwnPropertyNames(myObject);//['a']
Object.keys();//['a']
in 는 속성이 대상과 [[Prototype]] 원형 체인에 존재하는지 검사하는 데 사용된다.obj.hasOwnProperty(…) 속성이 대상에 존재하는지 검사하기 위해 [[[Prototype]] 원형 체인을 검사하지 않습니다in 의 특수성:
  • 수조에 대해 속성명이 존재하는지 검사
  • 수조에 대해 수조의 하표/인덱스를 검출
  • 방금 우리는 for...in,Object.getOwnPropertyNames,Object.keys()를 두루 사용해서 대상의 모든 속성을 열거해 보았는데 그들은 어떤 차이가 있습니까?위의 코드를 수정했습니다.
    var myObject = {
        a:2
    }
    Object.defineProperty(myObject,"a",{
        enumerable:false
    })
    Object.defineProperty(myObject,"b",{
        enumerable:true,
        value:2
    })
    //----------------
    for(var prop in myObject){
        console.log(prop,myObject[prop]);
    } //b 2
    Object.getOwnPropertyNames(myObject);//['a','b']
    Object.keys(myObject);//['b']

    보시다시피 myObject에 속성 a가 확실히 존재하지만 옮겨다니지 않았습니다.이것은 현재 속성의 속성 설명자에 정의된 ennmerable 와 관련이 있습니다.
    대상을 정의할 때 대상의 속성은 기본적으로 모두 보입니다. 즉 ennmerable:true 특수한 속성을 차단하려면 false 로 수정할 수 있습니다.
    Object.keys() & Object.getOwnPropertyNames(…)
    동일점: 대상이 직접 포함하는 속성만 찾고 원형 체인[[[Prototype]]에서 찾지 않습니다
    차이점: Object.keys () 는 모든 열거 가능한 속성을 훑어봅니다
    ​ Object.getOwnPropertyNames(...)는 모든 객체 등록 정보를 통과합니다.
    for...in은 대상과 원형 체인의 매개 속성을 옮겨다니는 데 사용됩니다.
    이상의 분석을 통해 우리는 대상의 속성을 판단할 때 더욱 명확하게 할 수 있다.

    좋은 웹페이지 즐겨찾기