>  기사  >  웹 프론트엔드  >  es6에서 has()의 사용법은 무엇입니까?

es6에서 has()의 사용법은 무엇입니까?

WBOY
WBOY원래의
2022-04-26 11:06:083703검색

es6에서 has() 메서드는 HasProperty 작업을 가로채는 데 사용되며 특정 속성을 숨기는 데에도 사용할 수 있습니다. 이 메서드는 함수의 in 연산자 역할을 하며 자체 속성이 있는지 상속된 속성이 있는지 여부를 나타내는 부울 값을 반환합니다. 구문은 "Reflect.has(속성을 찾을 대상 개체, 확인할 속성)"입니다.

es6에서 has()의 사용법은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 10 시스템, ECMAScript 버전 6.0, Dell G3 컴퓨터.

es6에서 has()의 사용법은 무엇입니까?

has는 함수의 in 연산자로 사용되며 자체 소유 또는 상속된 속성이 있는지 여부를 나타내는 부울 값을 반환합니다.

함수 has()의 구문은 아래에 나와 있습니다. 여기서

  • target은 속성을 찾을 대상 개체입니다.

  • propertyKey는 확인할 속성의 이름입니다.

Reflect.has(target, propertyKey)

has() 메서드는 HasProperty 작업을 가로채는 데 사용됩니다. 즉, 개체에 특정 속성이 있는지 확인할 때 이 메서드가 적용됩니다. 일반적인 연산은 in 연산자입니다.

has() 메서드는 대상 개체와 쿼리할 속성 이름이라는 두 개의 매개 변수를 허용할 수 있습니다.

has() 메서드를 사용하면 in 연산자가 특정 속성을 발견하지 못하도록 숨길 수 있습니다.

var handler = {
  has(target, key) {
    if (key[0] === "_") {
      return false;
    }
    return key in target;
  },
};
var target = { _prop: "foo", prop: "foo" };
var proxy = new Proxy(target, handler);
"_prop" in proxy; // false

원본 객체의 속성 이름의 첫 번째 문자가 밑줄인 경우,proxy.has()는 false를 반환하고 in 연산자에 의해 발견되지 않습니다.

원래 객체를 구성할 수 없거나 확장이 금지된 경우 has() 차단이 오류를 보고합니다.

var obj = { a: 10 };
Object.presentExtensions(obj);
var p = new Proxy(obj, {
  has: function(target, prop) {
    return false;
  },
});
"a" in p; // TypeError is thrown

위 코드에서 obj 객체는 확장이 금지되어 있으므로 has를 사용하여 가로채면 오류가 보고됩니다. 즉, 속성을 구성할 수 없는 경우(또는 대상 객체를 확장할 수 없는 경우) has() 메서드는 대상 객체의 속성을 "숨기지"(즉, false 반환)서는 안 됩니다.

has() 메서드는 HasOwnProperty 작업이 아닌 HasProperty 작업을 가로채는 점에 주목할 가치가 있습니다. 즉, has() 메서드는 속성이 객체의 자체 속성인지 상속된 속성인지 확인하지 않습니다.

또한 for...in 루프도 in 연산자를 사용하지만 has() 차단은 for...in 루프에 적용되지 않습니다.

let stu1 = { name: "lily", score: 59 };
let stu2 = { name: "lucy", score: 99 };
let handler = {
  has(target, prop) {
    if (prop === "score" && target[prop] < 60) {
      console.log(`${target.name} 不及格`);
      return false;
    }
    return prop in target;
  },
};
let oproxy1 = new Proxy(stu1, handler);
let oproxy2 = new Proxy(stu2, handler);
"score" in oproxy1;
// lily 不及格
// false
"score" in oproxy2;
// true
for (let a in oproxy1) {
  console.log(oproxy1[a]);
}
// lily
// 59
for (let b in oproxy2) {
  console.log(oproxy2[b]);
}
// lucy
// 99

위 코드에서 has() 차단은 in 연산자에만 적용되고 for...in 루프에는 적용되지 않으므로 요구 사항을 충족하지 않는 속성은 for...in 루프에서 제외되지 않습니다. .

【관련 추천: javascript 비디오 튜토리얼, web front-end

위 내용은 es6에서 has()의 사용법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.