JS的undefined与null,==与===的区别

一、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;

注:声明与定义的区别:

let a;//声明
let b = 10;//声明加赋值===定义
//也就是说一个变量如果定义了,那么它一定是声明了,反过来声明了,却不一定有定义;
// 比较形象的解释:
// 声明:好比你和你的女朋友说我爱你,我将来会娶你,但是这仅仅是口头上面的声明而已;let b;
// 定义:就是比如你和你的女朋友说我爱你,我将来会娶你,紧接着你把你的聘礼给了她:let b = 10万块;
 
注意:
 
1.定义是一件神圣而伟大的事情,所以通常对于其它语言来说定义只有一次,举个C语言的例子:
int a = 100;//声明加赋值===定义
float a = 10;//这里就出错了,不能重复定义
 
2.只要声明的时候没有定义,后面的赋值都仅仅是赋值:
int a;//声明
a = 10//赋值
a = 100//赋值
 
3.对于JS这个允许渣男存在的语言来说:
var a = 100;//向女朋友说娶她,将来给它100万做聘礼;
var = 0.01;//过了几天发现自己是个月薪三千的low逼,后来重新对女朋友说会娶她,并说聘礼100块钱人民币
a = 10;//即使后来又给了她10万块
a = 100;//又给了100万块,这仅仅是给而已,错过了当时神圣的定义;
 
4.索性JS还有一个let机制,牵制男人行为的惩罚机制:
let a = 100//向女朋友说娶她,将来给它100万做聘礼;
let a = 0.01;//过了几天发现自己是个月薪三千的low逼,后来重新对女朋友说会娶她,并说聘礼100块钱人民币;
紧接着会发现JS的老天爷看不下去了,给了他一个晴天霹雳:
||
||
/
说狗男人,你涉嫌违反JS世界的let承诺书,根据let承诺书第521条第121款的说明,你无权更改承诺!
你之前可是对你女朋友说的100W,现在只有多少,你好好看看!
 
穷则独善其身,达则兼济天下……
原文地址:https://www.cnblogs.com/hmy-666/p/14666168.html