学习JS遇到一个问题:
var arr1 = ['a','b','c'];
var arr2 = ['a','b','c'];
alert(arr1.toString() === arr2.toString());
alert(typeof(arr1.valueOf()));
alert(typeof(arr2.valueOf()));alert(arr1.valueOf() == arr2.valueOf()); //false
alert(arr2.valueOf());
alert(arr1.valueOf() === arr2.valueOf()); //falsevalueOf() 方法返回 Array 对象的原始值。
原始值不是返回的是a,b,c吗.
arr1.valueOf()与arr2.valueOf()为什么不相等?
var arr1 = ['a','b','c'];
var arr2 = ['a','b','c'];
alert(arr1.toString() === arr2.toString());
alert(typeof(arr1.valueOf()));
alert(typeof(arr2.valueOf()));alert(arr1.valueOf() == arr2.valueOf()); //false
alert(arr2.valueOf());
alert(arr1.valueOf() === arr2.valueOf()); //falsevalueOf() 方法返回 Array 对象的原始值。
原始值不是返回的是a,b,c吗.
arr1.valueOf()与arr2.valueOf()为什么不相等?
arr1.valueOf().toString()
alert( arr2===arr2.valueOf() );
alert( arr2===arr2.valueOf() ); //true
这样的话,数组的valueOf()返回的还是数组本身了?但是
var a = new String('aa');
var b = new String('aa');
alert(a.valueOf() == b.valueOf());//true
alert(a.valueOf() === b.valueOf());//true
这两个是字符串对象,为什么却可以进行比较呢.
var arr1 = ['a','b','c'];
var arr2 = ['a','b','c'];
alert(arr1.valueOf());
alert(arr2.toString());
alert(arr1.valueOf()==arr2.valueOf());
alert(arr1.toString()==arr2.toString());
数组的valueOf返回数组本身,数组之间的相等比较的不是toString的相等,而是比较的内存地址,所以两个数组不相等。
然后string类型的valueOf返回的还是string,string跟number是一样的,是基本类型,比较的只是值相等。
恩,都是楼上说的,我总结下。。