千家信息网

es6里的has()怎么用

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"es6里的has()怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"es6里的has()怎么用"吧!在es6中,has()方法用于拦
千家信息网最后更新 2025年01月19日es6里的has()怎么用

本篇内容主要讲解"es6里的has()怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"es6里的has()怎么用"吧!

在es6中,has()方法用于拦截HasProperty操作,也可用于隐藏某些属性;该方法作为函数的in运算符,返回一个布尔值,指示是否存在自有或继承的属性,语法为"Reflect.has(查找属性的目标对象,要检查的属性)"。

本教程操作环境:windows10系统、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()方法拦截的是 HasProperty 操作,而不是 HasOwnProperty 操作,即 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;// truefor (let a in oproxy1) {  console.log(oproxy1[a]);}// lily// 59for (let b in oproxy2) {  console.log(oproxy2[b]);}// lucy// 99

上面代码中,has()拦截只对 in 运算符生效,对 for…in 循环不生效,导致不符合要求的属性没有被 for…in 循环所排除。

到此,相信大家对"es6里的has()怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

属性 对象 方法 运算符 运算 目标 循环 函数 代码 内容 布尔 指示 语法 会报 学习 查询 检查 配置 实用 更深 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库工程师需要学习什么 网络安全贺卡怎么做 如何将文件只保留在服务器上 兴化威力网络技术价格查询 服务器开机自动重启 矿机软件开发公 惠州物联网软件开发价格 宝山区威力网络技术 河源足疗店线上点餐软件开发 戴尔服务器无法识别光驱 九台区网络技术咨询品质保障 云计算与网络安全就业前景 哈尔滨国家网络安全竞赛答案 国际性互联网科技展设备 建筑生存服务器作品展示 csgo怎么进服务器 衢州云软件开发总结 有没有谁认识搞软件开发的 南昌软件开发管理 太仓专业网络技术推荐咨询 北京武神世纪网络技术有限公司 游戏登录服务器和网关服务器 网络安全竞赛用户名去哪查 阿里数据库兼容oracle吗 国家数据库中心糯稻品种龙糯三号 sun服务器查看固件版本 广西crm软件开发服务商 饥荒链接服务器很卡 华为x6000服务器安装方法 运行管理员如何连接服务器
0