js判断是否为null,undefined,NaN,空串或者空对象

news2024/11/25 0:42:43

js判断是否为null,undefined,NaN,空串或者空对象

这里写目录标题

    • js判断是否为null,undefined,NaN,空串或者空对象
      • 特殊值
        • null
        • undefined
        • NaN
        • 空字符串("")
        • 空对象({})
      • typeof函数
      • 判断undefined
      • 判断null
      • undefined和null
        • === 和 == 的理解
      • 判断NaN
      • 判断空字符串
      • 判断对象为空
        • 使用JSON.stringify()
        • 使用es6的方法Object.keys()
        • for in 循环判断
        • 使用Object对象的getOwnPropertyNames方法
      • 判断空数组

特殊值

null

是一个特殊的值,表示一个空或者不存在的对象引用,表示一个变量被人为的设置为空对象,不是原始状态。

undefined

当一个变量被声明,但没有赋值时,它的默认值是 undefined。此外,当访问不存在的对象属性或数组元素时,结果也是 undefined。

NaN

(Not a Number)是一个特殊的值,表示在执行数学运算时,结果不是一个合法的数字。NaN 属于 Number 类型,它与任何值(包括 NaN 本身)都不相等。

出现NaN的情况:

  • 数学运算中的无效操作,例如:0 / 0Math.sqrt(-1)
  • 将非数字的值强制转换为数字时,例如:parseInt("abc")Number("xyz")

空字符串(“”)

一个空字符串是一个长度为 0 的字符串。它不是 null 或 undefined,而是一个完全有效的字符串,只是它没有内容。

空对象({})

空对象是一个没有任何属性的对象。它不是 null、undefined 或空字符串,而是一个有效的 JavaScript 对象。

typeof函数

基本类型:String、Number、Boolean、Symbol、Undefined、Null

引用类型:Object(object、array、function)

typeof ''                     // "string"
typeof 'Bill Gates'           // "string"
typeof 0                      // "number"
typeof 3.14                   // "number"
typeof false                  // "boolean"
typeof true                   // "boolean"
typeof Symbol()               // "symbol"
typeof Symbol('mySymbol');    // "symbol"
typeof undefined              // "undefined"
typeof null                   // "object"
typeof {name:'Bill', age:62}  // "object"
typeof [0, 1, 2]              // "object"
typeof function(){}           // "function"
typeof (()=>{})               // "function"
typeof testnull               // "function"  testnull是函数名

判断undefined

let a = undefined;
if (typeof (a) === "undefined" || a === undefined) {
  console.log("undefined");
}

判断null

需要注意的是 typeof(null) = object

let b = null;
console.log(typeof (b));

if (b === null) {
  console.log("null1");
}
// !key && typeof(key)!=undefined 过滤完之后只剩 null 和 0 了,再用一个 key!=0 就可以把 0 过滤掉了
if (!b && typeof (b) != "undefined" && b != 0) {
  console.log("null2");
}

undefined和null

if(a == null) { // 等同于 a === undefined || a === null
  console.log("为null");
}

undefined 和 null 用 == 比较是相等的

null 的类型是 object,undefined 的类型是 undefined

== 是先把左右两边转化为相同的类型,再进行区分

=== 和 == 的理解

=== :严格相等,会先比较类型,再比较值

== :宽松相等,是先把左右两边转化为相同的类型,再进行区分,仅要求值相等,而不要求类型
true 转化为整数后是 1,false 转化为整数后是 0

https://cloud.tencent.com/developer/article/1703891
https://blog.csdn.net/qq_42533666/article/details/129190944

判断NaN

NaN具有非自反的特点,所谓的非自反就是说,NaN 与谁都不相等,包括它本身,但在 NaN != NaN 下会返回true,可以根据这个特性判断

let num = NaN;
let num2 = 0/0;

if (typeof (num) === "number" && isNaN(num)) {
  console.log("num is NaN1");
}
if (num2 != num2) {
  console.log('num is NaN2');
}

https://blog.csdn.net/Lu5957/article/details/122609879
https://blog.csdn.net/qq_43563538/article/details/103815482
https://www.cnblogs.com/k1023/p/11851943.html

判断空字符串

直接将其与空字符串比较,或者调用 trim() 函数去掉前后的空格,然后判断字符串的长度

  • 判断字符串为空(空格算空)
let str = " ";

if (str === '' || str.trim().length === 0){
  console.log('empty str 1');
}

if (typeof str == 'string' && str.length > 0) {
  console.log('not empty str');
}
  • 判断字符串不为空(空格不算空)
if (typeof s == 'string' && s.length > 0) {
  console.log('not empty str');
}

https://blog.csdn.net/K346K346/article/details/113182838

判断对象为空

使用JSON.stringify()

将 JavaScript 值转换为 JSON 字符串,再判断该字符串是否为"{}"

let data = {};
if (JSON.stringify(data) === '{}') {
  console.log('empty obj 1');
}

使用es6的方法Object.keys()

if (Object.keys(data).length === 0) {
  console.log('empty obj 2');
}

for in 循环判断

通过 for…in 语句遍历变量的属性

if (judge(data)) {
  console.log('empty obj 3');
}
function judge(data) {
  for (let key in data) {
    return false;
  }
  return true;
}

使用Object对象的getOwnPropertyNames方法

使用Object对象的getOwnPropertyNames方法,获取到对象中的属性名,存到一个数组中,返回数组对象,通过判断数组的length来判断此对象是否为空

if (Object.getOwnPropertyNames(data).length == 0) {
  console.log('empty obj 4');
}

https://www.jb51.net/article/209387.htm
https://www.cnblogs.com/shanhubei/p/16969190.html
https://blog.csdn.net/qq_38709383/article/details/123224833

判断空数组

首先判断变量是否为数组,然后通过 length 属性确定

let arr = [];
if (arr.length == 0) {
  console.log('empty arr 1');
}

if (arr instanceof Array && !arr.length) {
  console.log('empty arr 2');
}

if (Array.isArray(arr) && !arr.length) {
  console.log('empty arr 3');
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/476895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】4. 开发工具的使用(yum/vim)

前言 工具的本质就是指令 在介绍工具之前先介绍一下互联网生态 Linux 软件包管理器 yum 1. 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以…

【算法】一文彻底搞懂ZAB算法

文章目录 什么是ZAB 算法?深入ZAB算法1. 消息广播两阶段提交ZAB消息广播过程 2. 崩溃恢复选举参数选举流程 ZAB算法需要解决的两大问题1. 已经被处理的消息不能丢2. 被丢弃的消息不能再次出现 最近需要设计一个分布式系统,需要一个中间件来存储共享的信息…

手把手教你开发第一个HarmonyOS (鸿蒙)移动应用

⼀、移动应⽤开发的介绍 移动应⽤开发: AndroidIOSHarmonyOS (鸿蒙) ⼆、HarmonyOS介绍 文档概览-HarmonyOS应用开发官网 2.1 系统的定义 2.1.1 系统的定位 HarmonyOS有三⼤特征: 搭载该操作系统的设备在系统层⾯融为⼀体、形成超级终…

常见元件、封装、尺寸、表面处理等

参考:https://www.bilibili.com/read/cv11024927?fromsearch&spm_id_from333.337.0.0 参考:https://www.bilibili.com/read/cv18413169?fromsearch&spm_id_from333.337.0.0 目录 通孔插件(THT)和表面贴装(SMT)技术封装类型SOP/SOIC封装DIP封装…

实战打靶集锦-018-decoy

提示:本文记录了博主的一次打靶过程 目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 浏览器探查 5. 突破边界6. 提权6.1 rbash绕过6.2 枚举系统信息6.3 枚举定时任务6.4 枚举可执行文件 7. 获取flag 1. 主机发现 目前只知道目标靶机在65.xx网段&#xff0c…

thinkphp6数据库操作

文章目录 数据库链接 查询构造器查询 添加修改删除链式操作链式操作wheretablefieldpageodrderjoincache 聚合查询分页查询 数据库 链接 在config下有个database.php文件,一般情况下我们配置这个文件即可 return [default > mysql,connections > …

学习记录:2023.4.27

2023.4.27 实习学习记录 Vue连接远程数据库Java基础 Vue cursor: pointer; 表示鼠标指针在该元素上时会变成手形,表示该元素可以被点击或者有交互性。这是一种CSS样式属性,常用于网页设计中。VueECharts实现热词图: 1、安装依赖:…

Linux命令集(Linux常用命令--cat指令篇)

Linux命令集(Linux常用命令--cat指令篇) Linux常用命令集(cat指令篇)4.cat(concatenate)1. 查看文件内容:2. 连接多个文件:3. 创建文件并通过终端写入内容4. 输出内容编号 Linux常用命令集(cat指…

操作系统概述

概述 一、简单描述 1、系统资源的管理者; 2、最接近硬件的一层软件; 3、向上层提供方便容易使用的服务; 二、提供的功能 1、处理机管理; 2、储存器管理; 3、文件管理; 4、设备管理; 举例说明…

Redis学习——day01

Redis学习基础 Nosql:Redis入门:Redis安装:Windows:Linux安装: Nosql: Nosql Not Only Sql(不仅仅Sql)NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起&#…

了解 AlphaFold2 论文必备知识,不会有人还不知道吧

你知道 AlphaFold2 吗?它真正解决了蛋白质三维结构预测的算法困境,堪称蛋白质界的 chat-GPT4,甚至它的意义不是 chat-GPT4 所能够匹敌的。它为世界疾病治疗药物开发以及探究生物生命之谜提供了通向天神的一条道路,未来是生物的世纪…

深入与浅谈 Vue 中计算属性和侦听器的区别和使用(Vue3版本为例)

#五一技术创作马拉松# 📋前言 计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。在 Vue 项目开发中,这两个技术点是非常重要的,同时也是 Vue 基础中不可缺少的知识点。在面试中,计算属性 comp…

【前端知识】内存泄漏与垃圾回收机制 (下)

【前端知识相关分享】内存泄漏与垃圾回收机制 (下) 6. 内存泄漏的解决方法6.1 解决方法概述6.2 什么是垃圾6.3 垃圾回收机制的定义及规则6.4 垃圾回收算法的基本流程 7. 垃圾回收的常见算法7.1 引用计数7.2 标记清除7.3 复制算法7.4 标记整理&#xff08…

十大经典排序算法总结(C语言版本)

前言:排序算法是最经典的算法知识,也是每个合格程序员应该需要掌握的知识点。考虑到排序算法通常代码简短,逻辑思维强和应用范围广等特性,排序算法题目便成为了面试中的常客。在面试中最常考的是快速排序和归并排序等基本的排序算…

SQL(基础)

DDL: 数据定义语言 Definition,用来定义数据库对象(数据库、表、字段)CREATE、DROP、ALTER DML: 数据操作语言 Manipulation,用来对数据库表中的数据进行增删改 INSERT、UPDATE、DELETE 注意: DDL是改变表的结构 DML…

一以贯之:从城市网络到“城市一张网”

《论语里仁》中子曰:“参乎,吾道一以贯之”。 孔子所说的“一以贯之”,逐渐成为了中国文化与哲学的重要组成部分,指明事物发展往往需要以标准化、集约化、融合化作为目标。这种智慧在数字化发展中格外重要。从云计算、大数据技术模…

一个快速去除黑背景和其他颜色背景,生成透明PNG图的小工具

做粒子效果或者其他一些图案的时候,时常能找到不少原图,但是却有黑色的背景或者其他背景色,导致用起来比较麻烦。这个小工具就可以方便的去除黑背景,生成透明PNG图,可以把想要的图案方便的取出来。 链接请见&#xff…

【Arduino 和 DS3231 实时时钟教程】

【Arduino 和 DS3231 实时时钟教程】 1. 概述2. 原理分析3. DS3231 实时时钟4. 编程1. 概述 在本Arduino教程中,我们将学习如何使用DS3231实时时钟模块。您可以观看以下视频或阅读下面的书面教程。 2. 原理分析 这里出现的第一个问题是,当Arduino本身具有内置计时器时,为什…

利用倾斜摄影超大场景的三维模型轻量化技术如何提高网络传输的效率?

利用倾斜摄影超大场景的三维模型轻量化技术如何提高网络传输的效率? 倾斜摄影超大场景的三维模型轻量化在网络传输中的效率可以通过以下几个方面进行提高: 一、数据压缩 对于倾斜摄影超大场景的三维模型数据,可以采用数据轻量化压缩技术进…

如何利用ChatPDF快速阅读英文论文,帮你写文章

如何利用ChatPDF快速阅读英文论文,帮你写文章 英语渣狂喜~确实惊艳到我了! 使用平台:https://www.chatpdf.com/ 1、上传PDF 访问官网:https://www.chatpdf.com/,界面很美,点击直接上传 PDF&…