programing

열거 가능은 무엇을 의미합니까?

mailnote 2023. 11. 2. 22:01
반응형

열거 가능은 무엇을 의미합니까?

MDN에 가서..페이지에 "..."라고 쓰여 있을 때개체의 열거 가능한 속성을 반복합니다."

그런 다음 Enumerability and Ownership of properties 페이지로 이동하여 "Enumerable properties는 다음에 대해 반복할 수 있는 속성입니다.순환으로."

사전에서는 열거 가능한 것을 셀 수 있는 것으로 정의하고 있지만, 그것이 무엇을 의미하는지 시각화할 수 없습니다.열거할 수 있는 것에 대한 예시를 얻을 수 있을까요?

열거형 속성은 다음 기간 동안 포함되어 방문할 수 있는 속성입니다.for..in루프(또는 유사한 속성의 반복, 예를 들어 다음과 같습니다.Object.keys()).

속성이 열거 가능한 속성으로 식별되지 않으면 루프는 속성이 개체 내에 있음을 무시합니다.

var obj = { key: 'val' };

console.log('toString' in obj); // true
console.log(typeof obj.toString); // "function"

for (var key in obj)
    console.log(key); // "key"

속성은 자체 속성에 따라 열거 가능 여부로 식별됩니다.속성 설명자의 일부로 볼 수 있습니다.

var descriptor = Object.getOwnPropertyDescriptor({ bar: 1 }, 'bar');

console.log(descriptor.enumerable); // true
console.log(descriptor.value);      // 1

console.log(descriptor);
// { value: 1, writable: true, enumerable: true, configurable: true }

A for..in그런 다음 loop은 개체의 속성 이름을 반복합니다.

var foo = { bar: 1, baz: 2};

for (var prop in foo)
    console.log(prop); // outputs 'bar' and 'baz'

하지만, 단지 그 진술을 평가할 뿐입니다.console.log(prop);이 경우 – 다음과 같은 특성을 가질 수 있습니다.[[Enumerable]]속성은true.

개체에 더 많은 속성(특히 상속으로 인한 속성)이 있기 때문에 이 조건이 적용됩니다.

console.log(Object.getOwnPropertyNames(Object.prototype));
// ["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", /* etc. */]

각 속성은 개체에 여전히 존재합니다.

console.log('constructor' in foo); // true
console.log('toString' in foo);    // true
// etc.

하지만, 그들은 그들을 지나쳐 버립니다.for..in열거할 수 없기 때문에 루프입니다.

var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, 'constructor');

console.log(descriptor.enumerable); // false

다음을 통해 객체를 생성하는 경우myObj = {foo: 'bar'}아니면 그 근처에 있는 것, 모든 재산은 열거할 수 있습니다.그래서 더 쉽게 물어볼 수 있는 질문은, 열거할 수 없는 것은 무엇인가요?어떤 개체는 몇 가지 셀 수 없는 속성을 갖습니다. 예를 들어 호출하는 경우Object.getOwnPropertyNames([])([]에서 열거 가능하든 그렇지 않든 모든 속성의 배열을 반환합니다.)['length'], 여기에는 배열의 enum할 수 없는 속성인 'length'가 포함됩니다.

호출을 통해 자신만의 숫자가 아닌 속성을 만들 수 있습니다.Object.defineProperty:

var person = { age: 18 };
Object.defineProperty(person, 'name', { value: 'Joshua', enumerable: false });

person.name; // 'Joshua'
for (prop in person) {
  console.log(prop);
}; // 'age'

이 예제는 자바스크립트의 숫자가 아닌 속성에서 많이 빌려오지만 열거 중인 개체를 보여줍니다.속성은 쓰기 가능하거나 구성 가능하거나 열거 가능하지 않을 수 있습니다.John Resig는 ECMAscript 5 Objects and Properties의 범위에서 이에 대해 설명합니다.

속성을 숫자화할 없도록 만드는 이유에 대한 스택 오버플로 질문이 있습니다.

그것은 시각화되어야 하는 것보다 훨씬 더 지루합니다.

모든 속성에 문자 그대로 "enumberable"이라는 속성이 있습니다.false로 설정된 경우for..in메소드는 해당 속성을 건너뛰고 존재하지 않는 척합니다.

"valueOf" 및 "hasOwnProperty"와 같이 "enumberable"이 false로 설정된 개체에는 자바스크립트 엔진을 반복하지 않는 것으로 추정되는 속성이 많이 있습니다.

를 사용하여 non-enumber 속성을 생성할 수 있습니다.Object.defineProperty방법:

  var car = {
    make: 'Honda',
    model: 'Civic',
    year: '2008',
    condition: 'bad',
    mileage: 36000
  };

  Object.defineProperty(car, 'mySecretAboutTheCar', {
    value: 'cat pee in back seat',
    enumerable: false
  });

이제는 자동차에 대한 비밀까지 숨겨져 있다는 사실이 숨겨져 있습니다.물론 이들은 해당 부동산에 직접 액세스하여 다음과 같은 답변을 얻을 수 있습니다.

console.log(car.mySecretAboutTheCar); // prints 'cat pee in back seat'

하지만, 그들은 그 재산이 존재한다는 것을 먼저 알아야만 할 것입니다. 왜냐하면 만약 그들이 그 재산을 통해 접근하려고 한다면,for..in아니면Object.keys그것은 완전히 비밀로 남을 것입니다.

console.log(Object.keys(car)); //prints ['make', 'model', 'year', 'condition', 'mileage']

그들은 그냥 그것을 "인에이블"이라고 불렀어야 했습니다.

ENUMERABLE의 한 줄 정의를 쓰겠습니다.

Enumerable:for/in 루프에서 속성을 반환할 수 있는지 여부를 Enumerable지정합니다.

var obj = {};
Object.defineProperties(obj, {
    set1: {enumerable: true},
    set2: {enumerable: false},
});
Object.keys(obj); // ["set1"]
Object.getOwnPropertyNames(obj); // ["set1", "set2"]

시각화하는 데 어려움이 있다면 열거할 수 있다는 것은 무엇을 의미합니까?" 헤아릴 수 없는 것이 무엇을 의미하는지 자문해 보는 것은 어떨까요?

나는 이것을 약간 이렇게 생각합니다. 셀 수 없는 재산이 존재하지만 부분적으로 숨겨져 있습니다. 즉, 셀 수 없는 재산이 이상한 재산이라는 것을 의미합니다.이제 여러분은 개체를 발견한 이후로 우리가 접하게 된 자연적인 속성인 남은 것을 열거할 수 있다고 상상할 수 있습니다.고려하다

var o = {};
o['foo'] =  0;                               // enumerable, normal
Object.defineProperty(o, 'bar', {value: 1}); // nonenumerable, weird

이제 a안에for..in, 그것을 의사코드처럼 상상해 보세요.

for property in o:
    if not property enumerable continue // skip non-enumerable, "bar"
    else do /* whatever */              // act upon enumerable, "foo"

당신이 자바스크립트로 입력한 루프의 본문이 그 자리에 있습니다./* whatever */

개체가 상속하는 기본 제공 메서드는 열거할 수 없지만 코드가 개체에 추가하는 속성은 명시적으로 언급되지 않는 한 열거할 수 있습니다.

다른 숫자에 대응하는 개체의 구조일 뿐인 열거형 데이터 유형을 생각해 보십시오.어떤 것을 열거자로 선언하는 것은 특정 숫자에 해당한다고 선언하는 것으로, 개체의 셀 수 있는 구성 요소를 나타내는 사전의 자리를 제공할 수 있습니다.간단히 말하면, 개체를 열거 가능하게 하는 것은 컴파일러에게 "야, 이 속성은 중요해, 나는 이 개체에 대한 데이터를 확인할 때 이것을 보고 싶어."라고 말하는 것과 같습니다.

methods가 열거 가능하지 않거나 methods에 내장되어 있습니다.to는 자바 스크립트에 열거 가능한 것이 무엇을 의미하는지 검색한 후에 속성 속성을 참조할 뿐입니다.ecma3에서 생성된 모든 개체는 열거 가능하며, ecma5u는 이제 정의할 수 있습니다...그게 다에요..:Doll이 답을 찾기까지 조금 시간이 걸렸지만, 데이비드 플래너건의 책에서 이야기된 것 같습니다.포린 루프에 메소드가 표시되지 않아 "숨겨진" 또는 "숨겨진"을 의미하는 것 같습니다. 따라서 "숨김"

언급URL : https://stackoverflow.com/questions/17893718/what-does-enumerable-mean

반응형