一、JS的==与===
1.JS的==是用于判断等值的,它判断之前会先进行类型转换,然后再比较值;
demo:
console.log("1==1:",1==1) console.log("1=='1':",1=='1')
结果:
2.JS的===是用于判断类型是否相等,它直接比较类型:
demo:
console.log("1===1",1===1) console.log("1==='1'",1==='1')
结果:
二、JS的undefined与null
1.正文
1.1引入正文前还要写个知识储备:
JavaScript 数据类型:
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(这个类型是后来新加的,有兴趣可以自己再查查)。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
值得注意的是,null与undefined都是只有一个值的基本数据类型,但是我们有时候会疑惑,null是否是值类型,但是当我打印typeof(null)的时候却是一个Object,即引用类型,具体原因如下:
这是因为在js存储中对象是以000开头的,而null是一个空,相当于全0,所以即使null不是Object类型,当我们使用typeof null打印的时候也是显示:Object
demo:可以使用instanceof查看null是否真的属于Object
let obj = {} console.log("obj的typeof打印:",typeof(obj)) console.log("obj是对象吗:",obj instanceof Object) console.log("null的typeof打印:",typeof(null)) console.log("null是对象吗:",null instanceof Object)
结果:
2.2正文正式开始:
1.JS的undefined是形容某变量声明了但是没有赋值。
demo:
let a;
console.log("我是a,我已经声明了变量,但是我还没有被赋值,下面是我的一些状态:") console.log("a的值:",a) console.log('a的类型:',typeof(a)); console.log("a==undefined吗:",a==undefined) console.log("a===undefined吗:",a===undefined)
运行结果:
2.而JS的null出现的原因是:某变量虽然有定义,但是却赋值为null;
demo:
let b = null; console.log("b的值:",b)
运行结果:
3.判断一个变量,为undefined或者null都可能正确的情况:
let a; console.log("我是a,我已经声明了变量,但是我还没有被赋值,下面是我的一些状态:") console.log("a的值:",a) console.log('a的类型:',typeof(a)); console.log("a==undefined吗:",a==undefined) console.log("a===undefined吗:",a===undefined) console.log('a==null吗:',a==null); console.log('a===null吗:',a===null);
运行结果:
运行结果的解释:
(1)对于undefined:a为已经声明的变量,但是在声明的时候没有赋值,也就是没有定义,所以会输出undefined;由于a的值与类型都是undefined,所以不管是值判断还是类型判断都显示正确。
(2)对于null:a虽然声明了,但是声明的时候没有赋值,也就是没有定义,所以a的值等于空,也就是等于null;但是a的类型是undefined,不是null,所以判断a===null时,打印为:false;
注:声明与定义的区别:
