JS小坑总结

news/2024/12/28 15:31:24/

js 在开发中遇到的一些小坑

  • 不能用{} != {} 来判断一个对象是否为空

不能用{} != {} 来判断一个对象是否为空

相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性。在转换不同的数据类型时,相等操作符遵循下列基本规则:

  1. 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;
 1==true // true'1'==true //true
  1. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值
'1'== 1 // true
1== '1' // true
  1. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;
  2. 如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;
  3. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回 true;
  4. 在比较相等性之前,不能将 null 和 undefined 转成其他值。
  5. null 和 undefined 是相等的。

依据上面的第五条,我们可以知道,两个对象的指向一个不同的,故无论如何 {} =={} 一定是 fasle.
那我们要如何去判断一个对象是否为空呢?
法一:使用 for…in

let a = { name: '222' };
let a = {};function emptyObj(obj) {let result = true;for (var i in obj) {result = false}return result
}
console.log(emptyObj(a)) // fasle
console.log(emptyObj(b)) // true

方法二:使用JSON.stringify()

JSON 自带的 stringify() 方法,用于将 JavaScript 值转换为 JSON 字符串,通过判断给定的对象转换后的是否费‘{}’l来判断对象是否为空

let a = { name: '222' };
let b = {};function emptyObj(obj) {return JSON.stringify(obj) === '{}'
}
console.log(emptyObj(a)) // fasle
console.log(emptyObj(b)) //true

方法三:使用Object.keys(obj)

ES6 新增的方法 Object.keys():Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。

如果我们的对象为空,他会返回一个空数组,如下:

let a = { name: '222' };
let b = {};function emptyObj(obj) {return Object.keys(obj).length === 0
}
console.log(emptyObj(a))
console.log(emptyObj(b))

http://www.ppmy.cn/news/32939.html

相关文章

I.MX6ULL_Linux_驱动篇(29) GPIO驱动

Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本篇的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 …

公司测试员用例写得乱七八糟,测试总监制定了这份《测试用例编写规范》

统一测试用例编写的规范,为测试设计人员提供测试用例编写的指导,提高编写的测试用例的可读性,可执行性、合理性。为测试执行人员更好执行测试,提高测试效率,最终提高公司整个产品的质量。 一、范围 适用于集成测试用…

Anaconda的简单使用(基本命令+jupyter内核切换)

一、Anaconda安装图1 Anaconda官网Anaconda官网,下载所对应的版本。这里2021年之后的版本(大概)需要有python3.9环境。按照安装教程一步步地走下去即可。Anaconda简介在开始菜单栏中可以看到Anaconda一系列的工具,常用的是Anaconda终端、Jupyter Noteboo…

Shell自动化管理 for ORACLE DBA

1.自动收集每天早上9点到晚上8点之间的AWR报告。 auto_awr.sh #!/bin/bash# Set variables ORACLE_HOME/u01/app/oracle/product/12.1.0/dbhome_1 ORACLE_SIDorcl AWR_DIR/home/oracle/AWR# Set date format for file naming DATE$(date %Y%m%d%H%M%S)# Check current time - …

【AI 工具】文心一言内测记录

文章目录一、申请内测二、收到内测邀请三、激活内测四、开始使用1、普通对话2、生成图片3、生成代码4、写剧本5、生成小说五、问题反馈一、申请内测 到 https://yiyan.baidu.com/welcome 页面 , 点击 " 开始体验 " 按钮 , 申请试用 ; 申请时 , 需要填写相关信息 ; 主…

【C语言进阶:刨根究底字符串函数】 strcmp 函数

本节重点内容: 深入理解strcmp函数的使用学会strcmp函数的模拟实现下面演示一种错误的比较方式: if ("abcdef" "bcdefg") //这里比较的是两个字符串首字符的地址,而不是字符串的内容 这种比法语法上是没有任何问题的…

基于springboot+vue的“智慧食堂”程序设计实现【毕业论文,源码】

系统登录界面系统架构开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat开发软件:eclipse/myeclipse/ideaMaven包:Maven浏览器&#xf…

IDEA好用插件:MybatisX快速生成接口实体类mapper.xml映射文件

目录 1、在Idea中找到下载插件,Install,重启Idea 2、一个测试java文件,里面有com包 3、在Idea中添加数据库 --------以Oracle数据库为例 4、快速生成entity-service-mapper方法 5、查看生成的代码 6、自动生成(增删查改&#xff0…