前端 JS 经典:判断对象属性是否存在

简介: 前端 JS 经典:判断对象属性是否存在

前言:在项目的业务逻辑中,有些场景会用到对象属性是否存在的判断。那么就需要我们选择适合业务的判断逻辑。

1. obj.name

通过 obj.name 判断属性是否存在,有个缺陷,就是当属性为 "", undefined, null, 0 时,也是判断的不存在。

let obj = {};
obj.name ? "存在" : "不存在"; // 不存在
 
let obj = { name: "" };
obj.name ? "存在" : "不存在"; // 不存在
 
let obj = { name: 0 };
obj.name ? "存在" : "不存在"; // 不存在
 
let obj = { name: null };
obj.name ? "存在" : "不存在"; // 不存在
 
let obj = { name: undefined };
obj.name ? "存在" : "不存在"; // 不存在
 
let obj = { name: "yqcoder" };
obj.name ? "存在" : "不存在"; // 存在

2. Object.keys(obj).includes('name')

拿到这个对象的所有属性名,这个属性名要求是自身可枚举的属性。那什么叫自身属性什么叫可枚举属性呐,自身属性是自有的属性,不是通过构造函数获得的,可枚举属性就是可以通过循环,遍历对象可以访问到的属性。

// 通过构造函数生成对象
function Create() {}
Create.prototype.name = "yqcoder";
let obj = new Create();
console.log(obj.name); // yqcoder;
Object.keys(obj).includes("name") ? "存在" : "不存在"; // "不存在"
 
// 不可枚举属性
let obj = { name: "yqcoder" };
Object.defineProperty(obj, "name", {
  enumerable: false,
});
console.log(obj.name); // yqcoder;
Object.keys(obj).includes("name") ? "存在" : "不存在"; // 不存在
 
// 正常情况对象属性
let obj = { name: "yqcoder" };
Object.keys(obj).includes("name") ? "存在" : "不存在"; // "存在"

3. obj.hasOwnProperty('name')

可以不是可枚举的属性,只要是自有属性,就 ok。

// 通过构造函数生成对象
function Create() {}
Create.prototype.name = "yqcoder";
let obj = new Create();
console.log(obj.name); // yqcoder;
obj.hasOwnProperty("name") ? "存在" : "不存在"; // "不存在"
 
// 不可枚举属性
let obj = { name: "yqcoder" };
Object.defineProperty(obj, "name", {
  enumerable: false,
});
console.log(obj.name); // yqcoder;
obj.hasOwnProperty("name") ? "存在" : "不存在"; // "存在"
 
// 正常情况对象属性
let obj = { name: "yqcoder" };
obj.hasOwnProperty("name") ? "存在" : "不存在"; // "存在"

4. 关键字 in

不要求是自由可枚举的属性了,只要能找到就 ok

// 通过构造函数生成对象
function Create() {}
Create.prototype.name = "yqcoder";
let obj = new Create();
console.log(obj.name); // yqcoder;
'name' in obj ? "存在" : "不存在"; // "存在"
 
// 不可枚举属性
let obj = { name: "yqcoder" };
Object.defineProperty(obj, "name", {
  enumerable: false,
});
console.log(obj.name); // yqcoder;
'name' in obj  ? "存在" : "不存在"; // 存在
 
// 正常情况对象属性
let obj = { name: "yqcoder" };
obj.hasOwnProperty("name") ? "存在" : "不存在"; // 存在


目录
相关文章
|
3月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
3月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
3月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
16天前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
34 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
3月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
3月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
45 1
JavaScript中对象的数据拷贝
|
3月前
|
存储 前端开发 JavaScript
前端中对象的深度应用与最佳实践
前端对象应用涉及在网页开发中使用JavaScript等技术创建和操作对象,以实现动态交互效果。通过定义属性和方法,对象可以封装数据和功能,提升代码的组织性和复用性,是现代Web开发的核心技术之一。
|
3月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
93 5
|
3月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
135 1
|
3月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
84 4

热门文章

最新文章

  • 1
    前端起dev从110秒减少到7秒, 开发体验大幅提升
    16
  • 2
    无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
    30
  • 3
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
    38
  • 4
    VSCode AI提效工具,通义灵码前端开发体验
    92
  • 5
    开箱即用的GO后台管理系统 Kratos Admin - 前端权限
    11
  • 6
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    46
  • 7
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    84
  • 8
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    34
  • 9
    巧用通义灵码,提升前端研发效率
    111
  • 10
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    159