Reflect.has()
åºçº¿
广æ³å¯ç¨
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Reflect.has() éææ¹æ³çä½ç¨ç±»ä¼¼äº in è¿ç®ç¬¦ï¼ä½å®ä»¥å½æ°çå½¢å¼å®ç°ã
å°è¯ä¸ä¸
const object = {
property1: 42,
};
console.log(Reflect.has(object, "property1"));
// ææè¾åºï¼true
console.log(Reflect.has(object, "property2"));
// ææè¾åºï¼false
console.log(Reflect.has(object, "toString"));
// ææè¾åºï¼true
è¯æ³
js
Reflect.has(target, propertyKey)
åæ°
target-
è¦æ¥æ¾è¯¥å±æ§çç®æ 对象ã
propertyKey-
è¦æ£æµç屿§åç§°ã
è¿åå¼
Booleanï¼è¡¨ç¤º target æ¯å¦å
·æè¯¥å±æ§ã
å¼å¸¸
TypeError-
妿
target䏿¯å¯¹è±¡ï¼åæåºæ¤å¼å¸¸ã
æè¿°
Reflect.has() æä¾äºä¸ç§ç¨äºæ£æ¥å±æ§æ¯å¦åå¨äºå¯¹è±¡ä¸çåå°è¯ä¹ãä¹å°±æ¯è¯´ï¼Reflect.has(target, propertyKey) å¨è¯ä¹ä¸çä»·äºï¼
js
propertyKey in target;
Reflect.has() ä¼è°ç¨ target ç [[HasProperty]] 对象å
鍿¹æ³ã
示ä¾
>ä½¿ç¨ Reflect.has()
js
Reflect.has({ x: 0 }, "x"); // true
Reflect.has({ x: 0 }, "y"); // false
// 对ååé¾ä¸ç屿§ä¹ä¼è¿å true
Reflect.has({ x: 0 }, "toString");
// 带æ .has() å¤ç卿¹æ³ç Proxy
obj = new Proxy(
{},
{
has(t, k) {
return k.startsWith("door");
},
},
);
Reflect.has(obj, "doorbell"); // true
Reflect.has(obj, "dormitory"); // false
Reflect.has ä¼å¯¹ä»»ä½ç»§æ¿ç屿§è¿å trueï¼è¿ä¸ç¹ä¸ in è¿ç®ç¬¦ç¸åï¼
js
const a = { foo: 123 };
const b = { __proto__: a };
const c = { __proto__: b };
// ååé¾ä¸ºï¼c -> b -> a
Reflect.has(c, "foo"); // true
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.has> |