关系操作符
- 如果两个操作数都是字符串,执行数值比较
- 如果都是字符串,则比较两个字符串对应的编码值
- 如果一个是数值,另一个操作数会强制转化为数值类型,然后比较
- 如果一个操作数是对象,调用该对象的valueOf()/toString()方法
相等操作符:
- 一个操作数是布尔类型,将其转化为数值—false–>0 true–>1
- 一个操作数为字符串,另一个操作数为数值,将字符串转化为数值
- 如果一个操作数是对象,另一个不是,调用该对象的valueOf()/toString()方法
- null和undefined是相等的
- 有一个操作数为NaN,相等操作符返回false,不等返回true 两个操作数都是NaN,返回false
- 两个操作数是对象,则比较是否是同一对象,是则返回true,不是false
//一个操作数是布尔类型,将其转化为数值---false-->0 true-->1
console.log("hello" == true);//1=="hello" f
console.log("hello" == false);//0=="hello" f
console.log("0" == true);//1=="0" f
console.log("0" == false);//0=="0" t
console.log("00" == false);//0=="0" t
console.log("0.00" == false);//0=="0" t
//一个操作数是布尔类型,将其转化为数值---false-->0 true-->1
//1=='' false
console.log(true == '');
console.log("" == true);//1=="" f
console.log("" == false);//0=="" t
console.log(" " == true);//" "==1 f
console.log(" " == false);//" "==0 t
// //" "==>0==>false
// //""==>0==>false
//
console.log(!" ")//f
//
console.log(!" " == true);//false==true f
console.log(!" " == false);//false==false t
一个操作数是对象
//如果一个操作数是对象,另一个不是,调用该对象的valueOf()/toString()方法
var obj = {
a: 0,
valueOf: function(){return 1}
}
console.log(obj.toString());//[object Object]
console.log(obj == "[object Object]");//true
console.log(obj.valueOf());//1
console.log(obj == 1);
console.log(obj == true);
**false null undefined 0 ’ ’ **
false :
- console.log(false == 0);//t
- console.log(false == ‘’);//t
null: - console.log(null == undefined);//t
undefined: - console.log(null == undefined);//t
0 - console.log(0 == ‘’);
console.log(false == null);
console.log(false == undefined);
console.log(false == 0);//t
console.log(false == '');//t
console.log(false == NaN);
console.log(null == undefined);//t
console.log(null == 0);
console.log(null == '');
console.log(null == NaN);
console.log(undefined == 0);
console.log(undefined == '');
console.log(undefined == NaN);//t
console.log(0 == '');
console.log(0 == NaN);
false除了和自身比较为true,和0,’’,比较为true
null只和undefined比较时为true,undefined只有和null比较为true
0与false, ‘’, []比较为true
''字符串和0,false比较为true,
数值类,非0均为真