前端 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") ? "存在" : "不存在"; // 存在


目录
相关文章
|
7月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
356 2
|
7月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
340 0
|
7月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
632 0
|
7月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
245 1
|
JavaScript 前端开发 API
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
365 23
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
488 8
|
JavaScript 前端开发 容器
|
JavaScript 前端开发
|
存储 JavaScript 前端开发

热门文章

最新文章