js中宽松相等(==)和严格相等(===)

目录

 一.简单数据类型和引用数据类型

        二:简单数据类型的==和===

 三 :复杂数据类型的==和===

 四:undefined  null  NaN的==与===


在开发中我们经常使用=,=的常见作用无非三种:运算,赋值,和判断相等

我们今天就判断相等来谈一谈



      一.简单数据类型和引用数据类型

   首先我们知道不同于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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值