JS中的数据类型比较

js中关于 = 的不同作用

  1. = :赋值
    把右边的值赋值给左边的属性或者变量
  2. == :比较
    不同数据类型时,先进行转换数据类型,再判断两边的值是否相等,
  3. === :绝对相等
    先判断两边值的数据类型,如果不是同一数据类型的,直接返回false。如果同类型,再判断是否相等

相同的数据类型比较 ==

基本数据类型中相同类型比较

// 在谷歌浏览器控制台输出
1==1
true

1==2
false

"1"=="1"
true

"1"=="2"
false

null==null
true

undefined==undefined
true

true==true
true

true==false
false

只要 == 号两边的值大小相同或者字符相同时,就是ture
还有一个特殊的 null==undefined 也会是true,都代表空值。但在绝对相同时 null===undefined 时是false,因为类型不同
且null和undefined与其他值永远不相等。NaN不等与任何一个值,包括它自身


引用数据类型进行比较

{}=={}
false
[]==[]
false

var a = {};
var b = a;
a == b
true

var fn1 = function fn(){}
var fn2 = function fn(){}
fn1==fn2
false

fn1 = fn2
fn1 == fn2
true

引用数据类型进行比较时,会查看两边堆内存引用空间地址是否相同,不同的空间地址就不相等


不同的数据类型进行比较

不同类型进行比较时会先隐式转换为相同类型

1=="1"
true

1==true
true

1==null
false
Number(null)
0

1==undefined
false
Number(undefined)
NaN

1=={}
false
Number({})
NaN
toString({})
"[object Undefined]"
Number("[object Undefined]")
NaN

1==[1]
true
Number([1])
1

对象和字符串比较时,会把对象转换成字符串进行比较

var obj = {name:1}

"[object Object]" == obj
true
true=={}
false

true==[1]
true

false==0
true

"1"==true
true

"1"==[1]
true

false==[]
true

总结一点规则,(仅代表个人)
除了对象与字符串进行比较时,会把对象隐式调用toString转换为字符串进行比较
其他不同类型都会转换为Number类型来比较。比如下面的练习题:

1==true   ===>true
1==false  ====false
2==true   ===>false

[]==true   ==>false
![]==true  ==> false
// 先把[]转换为布尔值然后取反,在进行比较

[]==[] 
var ary1=[1,2];
var ary2=ary1
ary1==ary2;

加一点:当其他类型直接转换成布尔值的时候 :

  • 0
  • " "
  • NaN
  • null
  • undefined

除了上面这五个值转换成布尔值是false之外,其他的都是true

你可能感兴趣的:(JavaScript)