复习的时候做一些学习的笔记总结。
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);//true
console.log(!b && b === "");//true
console.log(!c && c === undefined);//true
console.log(!d && d === null);//true
这四个值取逻辑非的结果均为true,且均与自身相等
但[]空数组和{}空对象不一样,拿空数组举例:
const emptyArr = [];
console.log(!emptyArr);//false
console.log(emptyArr === []);//false
因为数组和对象是引用类值,变量的值为真实对象的索引,任意两个空数组和空对象都不相等。
所以判断空数组和空对象是有点复杂的,需要一些办法来判断:
1. JSON.stringify()
const emptyArr = [];
const emptyObj = {};
console.log(JSON.stringify(emptyArr) === "[]"); //true
console.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);//验证为对象且为空
最后,上面两种办法只能验证是否为[]{},无法验证嵌套的空数组、空对象,如[{},[]],若要验证是否空里有空,需要根据实际情况自己写一个遍历函数