目录
在开发中我们经常使用=,=的常见作用无非三种:运算,赋值,和判断相等
我们今天就判断相等来谈一谈
一.简单数据类型和引用数据类型
首先我们知道不同于c语言,java ,js是一种弱类型语言,其数据类型可大致分为两类:值类型(简单数据类型)和引用类型(复杂数据类型)
值类型包括(NumberString,boolean,undefined,null)
引用类型(array,object,function等 )
两种数据类型在变量储存存在差异
简单数据类型:在存储时变量中存储的是值本身,因此叫做值类型
引用数据类型:,在存储时变量中存储的仅仅是地址(引用) , 因此叫做引用数据类型
因此两种数据类型在判断相等时的条件也截然不同
二:简单数据类型的==和===
1.==判断
var a="111"//字符串
var b=111 //数字
console.log(a == b);//结果为true
(==)相等判断时,编译器会将两个被比较的值转换为相同类型 ,判断两变量的值是否相等 ,故“111”和 111 相等
2.===判断
var a="111"//字符串
var b=111 //数字
console.log(a === b);//结果为flase
(===)严格判断相等时 ,不仅要对两变量值进行比较,还要将两边数据类型进行比较,故两者一个为字符串,一个为数字,所以不相等
三 :复杂数据类型的==和===
首先,我们需要明确,对于复杂数据类型,==和===没有区别,都是进行地址比较
var arr1=[1,2,3]
var arr2=[1,2,3]
console.log(arr1=== arr2);//结果为flase
arr1 和arr2 的数据类型和值都相同,但两者却不相等,这是因为复杂数据类型需要进行地址比较 arr1 和arr2 在定义时拥有不同的指针指向,故不相等
var arr3=[1,2,3]
var arr4=arr3
console.log(arr3=== arr4);//结果为true
arr3 赋值将值与地址一同赋给arr4,所以判断时两者地址相同,判断相等
四:undefined null NaN的==与===
1.undefined 和 null
我们都知道undefined 和null和相似,都表示没有值 但
undefined 表示一个变量已经被声明,但没有被赋值。null 则表示一个对象指针指向了“空”,它用于表示一个对象不存在,两者存在本质区别
其也可以通过==和===说明
console.log(undefined == null);//结果为true
console.log(undefined === null);//结果为flase
并且在运算时null可以与数字进行数学运算 而undefined不可以
console.log(undefined + 10);//结果为NaN
console.log(null + 10);//结果为0
2.NaN
NaN是一个特殊的数字值
console.log(typeof NaN);//结果为number
NaN和任何值都不相等
console.log(NaN == undefined);//flase
console.log(NaN == null);//flase
console.log(NaN == 123);//flase
并且NaN与NaN也不相等
console.log(NaN == NaN);//结果为flase