function show(n1, n2, b) {
b == true
? console.log(n1 + ' equal ' + n2)
: console.log(n1 + ' not equal ' + n2);
}
var a = new String('hi');
var b = new String('hi');
console.log('==');
(a == b)
? show(a, b, true)
: show(a, b, false);
console.log('===');
(a === b)
? show(a, b, true)
: show(a, b, false);
结果:
==
hi not equal hi
===
hi not equal hi
a:object对象 值为new String(‘hi')的引用
b:object对象 值为new String('hi')的引用
js中双等符号约定:如果2个变量的类型是一样的 则会调用三等符号的约定 即这里’==‘被隐式的转为’===‘
因此 2次结果都是 not equal
以下是js中双等和三等符号的约定:
===操作符:
要是两个值类型不同,返回false
要是两个值都是number类型,并且数值相同,返回true
要是两个值都是stirng,并且两个值的String内容相同,返回true
要是两个值都是true或者都是false,返回true
要是两个值都是指向相同的Object,Arraya或者function,返回true
要是两个值都是null或者都是undefined,返回true
==操作符:
如果两个值具有相同类型,会进行===比较,返回===的比较值
如果两个值不具有相同类型,也有可能返回true
如果一个值是null另一个值是undefined,返回true
如果一个值是string另个是number,会把string转换成number再进行比较
如果一个值是true,会把它转成1再比较,false会转成0
如果一个值是Object,另一个是number或者string,会把Object利用 valueOf()或者toString()转换成原始类型再进行比较