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

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');
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql实现存在则保存,不存在则更新

方式1 ON DUPLICATE KEY UPDATE 使用前提:表必须配置唯一键或者主键,且保存的字段中包含该键【重点】 原理: ON DUPLICATE KEY UPDATE如果配合主键,存在数据a,新插入b,如果主键不冲突,会保存b…

分布式监控平台-Zabbix

分布监控平台-Zabbix 一、Zabbix概述1、Zabbix是什么?2、Zabbix监控原理 二、部署Zabbix服务端(端口:10051)1、关闭防火墙 修改主机名2、获取Zabbix下载资源3、安装SCL(Software Collections),修改 Zabbix-front 前端源…

Analysis For Office的一些使用技巧

目录 1. 自由特性下钻停止刷新 2. 直接双击过滤内容 3.重复层级值 4. 从过滤值选参数 5.从Excel复制参数 6. 保存参数值 7.计划值回退到上一步 8. 保存当前导航步骤 1. 自由特性下钻停止刷新 一般我们每次拖一个自由特性到workbook里,报表都会自动刷新。如…

ARL灯塔(无需VPS版)

标题随便写,能看到都是有缘人 搭建灯塔那么繁琐的步骤,远不如爆破一个灯塔是吧(狗头) 而且还可能买不起VPS的情况(例如我) 那不如写一个脚本去爆破灯塔的弱口令 整治网络安全 从你我做起 fofa语法: icon_hash"1708240621"…

adk部署win10

adksetup.exe安装 百度搜索adk 在这里插入图片描述 https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install下载adk 注意:要和操作系统版本对应上,我这里是1903版本的win10。

探索未来的数字人生:全景VR数字人

在数字化时代,人工智能和虚拟现实技术正日益成为我们生活中不可或缺的一部分。而全景VR数字人,则是这一时代的最新产品,吸引了越来越多的关注和研究。 一、什么是全景VR数字人? 全景VR数字人是一种通过虚拟现实技术创造的数字人形…

中国移动发布COCA软硬一体片上计算架构,引领云计算市场下一个黄金十年

当前,数字经济发展已经成为改变全球竞争格局的关键力量,随着算力成为数字经济新引擎,算力规模持续增长,算力结构发生改变。主动拥抱智算浪潮,持续输出优质算力支撑数字中国建设,适配泛在化、异构化算力推动…

如何理解自动化测试数据驱动与关键字驱动的区别?

一、关键字驱动KDT(Keyword-driven testing) 1、自动化测试框架发展的第三个阶段是关键字驱动测试框架阶段,它是当前比较流行的一种框架之一,并且现在的自动化测试工具已经将关键字驱动框架融入到工具中。在录制过程中自动化测试工具会将对象及操作属性保…

在外Windows远程连接MongoDB数据库【无公网IP】

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自远程内网穿透的文章:公网远…

大数据Doris(六):BE部署及启动

文章目录 BE部署及启动 一、上传安装包并解压 二、修改be.conf 配置文件

【Java笔试强训 3】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥最长的…

跳跃游戏 (DFS->记忆化搜索->动态规划/贪心证明)

一.跳跃游戏简单介绍 1. 跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数&#…

[入门必看]数据结构5.2:二叉树的概念

[入门必看]数据结构5.2:二叉树的概念 第五章 树与二叉树5.2 二叉树的概念知识总览5.2.1_1 二叉树的定义和基本术语5.2.1_2 二叉树的性质5.2.2 二叉树的存储结构 5.2.1_1 二叉树的定义和基本术语二叉树的基本概念二叉树的五种状态几个特殊的二叉树满二叉树&#xff1…

Navicat安装教程和评测

Navicat是一款功能强大的数据库管理软件,拥有丰富的功能和易于使用的界面,因此价格相对较高。此外,Navicat还提供了多种数据库类型的支持,包括MySQL、Oracle、PostgreSQL等,每种数据库类型都需要花费开发人员大量的时间…

飞利浦水健康携净水新品重磅亮相AWE2023

2023年度中国家电及消费电子博览会(AWE2023)于4月27日在上海新国际博览中心正式开幕。其中,飞利浦水健康携全屋高阶净水G5系列、厨下净水器U22Pro、冰热矿净四合一台式净饮机等新品悉数亮相,在暌违2年的AWE舞台上,为行…

小程序按钮重复点击解决方案

文章目录 前言一、为什么会发生重复点击二、针对以上问题怎么处理1、分析解决方法:1. 反馈2.禁用 三、最优解决总结 前言 小程序是直面用户便捷的应用,而在用户使用时往往都会涉及到关键节点的按钮点击,例如,注册登录时&#xff…

【技术】《Netty》从零开始学netty源码(四十八)之缓存池ObjectPool

目录 ObjectPool创建对象池获取对象get()从本地池中获取对象claim()回收对象 ObjectPool 在分析PooledByteBuf的时候我们遇到了recycleHandler类,该类用于回收已经使用完毕的缓存对象并将其放回池中供下次循环利用,Netty的对象池工作过程大体如下&#…

vulnhub靶机Misdirection

环境准备 下载链接:https://download.vulnhub.com/misdirection/Misdirection.zip 解压后双击ovf文件导入虚拟机 网络:DHCP、NAT、192.168.100.0/24网段 信息收集 主机发现 192.168.100.133是新增的ip 端口扫描 发现开放了以上端口,继续…

ChatGPT之父:未训练GPT-5

GPT等大型语言模型带动的芯片需求飙升趋势依然没有平息的迹象,英伟达的最新版旗舰AI芯片H100近日在网上的售价已经被炒到4万多美金,反映了科技行业对训练和部署人工智能软件的需求仍未被满足。 一、商业圈 1.马斯克成立新AI公司硬刚OpenAI 当地时间4月…

c++ 11标准模板(STL) std::vector (二)

定义于头文件 <vector> template< class T, class Allocator std::allocator<T> > class vector;(1)namespace pmr { template <class T> using vector std::vector<T, std::pmr::polymorphic_allocator<T>>; }(2)(C17…