复习的时候做一些学习的笔记总结。

javascript的值的类型:

  • 原始值:number、string、boolean、undefined、null、symbol(ES6)、bigint(ES10)
  • 引用值:引用对象(object、array、function)

在编写代码的过程中,我们经常会遇到对0、“”、undefined、null的判定,我们可以使用逻辑非和逻辑比较(与自己)运算共同确定是哪一个类型的空值,如:

   const a = 0;const b = "";const c = undefined;const d = null;console.log(!a && a === 0);//trueconsole.log(!b && b === "");//trueconsole.log(!c && c === undefined);//trueconsole.log(!d && d === null);//true这四个值取逻辑非的结果均为true,且均与自身相等

但[]空数组和{}空对象不一样,拿空数组举例:

   const emptyArr = [];console.log(!emptyArr);//falseconsole.log(emptyArr === []);//false

因为数组和对象是引用类值,变量的值为真实对象的索引,任意两个空数组和空对象都不相等。
所以判断空数组和空对象是有点复杂的,需要一些办法来判断:

1. JSON.stringify()

       const emptyArr = [];const emptyObj = {};console.log(JSON.stringify(emptyArr) === "[]"); //trueconsole.log(JSON.stringify(emptyObj) === "{}"); //true

通过判断空数组和空对象的json.stringify返回值与"[]“、”{}"是否相等判断。
注:toString()和String方法对空数组和空对象的转换结果和JSON.stringify不一样:

   console.log(emptyArr.toString());console.log(emptyObj.toString());

控制台显示:(toString和String方法的结果一致)

2. 判断数组的长度/对象key的长度

  • 空数组 :
    使用isPrototypeOf()方法和数组的length()方法判断一个值 :1.是数组;2.为空。
    isPrototype()的用法:objA.isPrototypeOf(objB) ,
    即判断对象A(objA)是否为对象B(objB)的原型链上的原型对象,如:若要判断一个变量a是否为数组,可以使用
    Array.prototype.isPrototypeOf(a)来判断,值为true\false(也可以用Array.isArray()判断是否为数组)
    接下来可以进行空数组验证:
   const emptyArr = [];console.log(Array.isArray(emptyArr) && emptyArr.length === 0); //验证为数组且为空
  • 空对象:
    同样需要判断:1.是对象;2.为空
    对象没有length属性,但是可以通过keys()方法获得对象内key的数组,所以:
   const emptyObj = {};console.log(Object.prototype.isPrototypeOf(emptyObj) && emptyObj.keys(obj).length === 0);//验证为对象且为空

最后,上面两种办法只能验证是否为[]{},无法验证嵌套的空数组、空对象,如[{},[]],若要验证是否空里有空,需要根据实际情况自己写一个遍历函数

js中判断空数组和空对象的方法相关推荐

  1. 关于js中的判断数组为空的问题

    如果你在查询一个文档,它啥都没存,但是doc就是返回了一个[]: User.find({email: userEmail}, {avatar: 1}, function (err, doc) {let ...

  2. shell中判断空字符串和有趣的空字符串

    Introduction Shell 中判断空字符串 以及有趣的空字符串 判断字符串是否为空 Example1 if [[ -z "$str" ]] thenecho " ...

  3. js中常用的数组和字符串方法

    一:js中常用的数组方法 <script>//函数声明式中的方法const arr=[1,3,6,9,15,19,16];//函数的所有方法 map(),reduce(),filter() ...

  4. JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象

       前   言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...

  5. .NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析

    偶然看到<C#中判断空字符串的3种方法性能分析 >作者:清清月儿  主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28 写的一 ...

  6. 总结JS中常用的数组的方法大全

    总结JS中常用的数组方法 JS中常用的数组方法总结 数组(Array)是一种复杂的数据类型,它属于Object(对象)类型,用来将一组数组合在一起,通过一个变量就可以访问一组数据.在使用数组时,经常会 ...

  7. C#中判断空字符串的3种方法性能分析【月儿原创】

    C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28  3种方法分别是:string ...

  8. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

  9. C#中判断空字符串的3种方法性能分析 1

    C#中判断空字符串的3种方法性能分析 作者:杨义贤 主页:http://blog.csdn.net/lucky_yyx       时间:2007.4.29  3种方法分别是:string a=&qu ...

最新文章

  1. Super SloMo神经网络生成极慢视频(PyTorch实现)
  2. C#磁盘遍历——递归
  3. Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容
  4. matlab中degrees,Convert degrees-minutes-seconds to degrees
  5. python哪些类型可以作为迭代器_python0.8-----set类型与迭代器
  6. tableau三轴该怎么做_如何用tableau绘制城市地铁线路图?
  7. c语言中实现自动平移,c语言实现图像的旋转与平移
  8. requests库入门09-OAUTH认证
  9. PHP是4个进程还是五个,PHP多进程(4) :内部多进程
  10. @AuotoWired+@Qualifier(百度百科)
  11. Javascript原生之用cssText批量修改样式
  12. 目前总结最新最系统的Java程序员未来职业规划路线,请收藏
  13. Proteus仿真:存储器
  14. B2B,B2C,C2C,C2B,B2G
  15. c# SharpPcap 截包,抓包 - 资料收集贴 --转
  16. html5图片自动滑动,超简单的图片左右切换滑动
  17. 计算机上语音是什么符号,语音
  18. java项目获取系统信息
  19. linux系统下操作nandflash指令,Linux驱动之Nand Flash原理及硬件操作
  20. warcraft 3 经典语句之月之女祭司(Priestess of the moon)

热门文章

  1. Eigen零零散散的一些总结
  2. mysql概念模型中的3种基本联系_在概念模型中,通常用实体联系图表示数据的结构,其 3 个要的元素是( )、( )和( )。_学小易找答案...
  3. python :jieba库的使用大全
  4. 极光 · 底层逻辑 · doubleの浮点误差
  5. C# 取QQ会话记录
  6. excel服务器okr系统,OKR工具能帮企业落地OKR吗?从飞书OKR看专业工具的价值
  7. 图解Java多线程设计模式——Java多线程基础
  8. 大计基编程题(第十三周)
  9. 计算机音乐告白之夜,温柔版:《告白之夜(纯音乐)》
  10. form表单如何不直接提交?