javascript对象比较比较符:==,!=,===,!==,>=,<=,>,<==总是试图比较他们的直,如果类型不一样,总是试图作转化。===比较同一性,不作转化就比较== 如果是基本类型(string, number, boolean),比较他们的值,var a = "123";var b = 123;则(a==b) = true;(a===b) = false;如果是object, array, function类型,比较他们的reference.只有当他们的reference相等才为true.function Point(x,y){ this.x = x; this.y = y;};
Point.prototype.toString = function(){ alert("in toString"); return "x=" + this.x + " y=" + this.y;};
Point.prototype.valueOf = function(){ alert("in valueOf"); return this.x+this.y;};var pa = new Point(1,1);var pb = new Point(1,1);var pc = pa;则:pa!=pb; pa!==pb; pa==pc; pa===pc;
var arr1 = [1,2,3];var arr2 = [1,2,3];arr1!=arr2, arr1!==arr2
不得不说一下0, false, null, undefinedvar t1 = 0; var t2 = false;var t3 = null;var t4;则:t1==t2;t1!==t2;t1!=t3; t1!==t3;t1!=t4; t1!==t4;t2!=t3; t2!==t3;t2!=t4; t2!==t4;t3==t4; t3!==t4;
如果一个object和一个基本类型比较,则先调用对象的valueOf,再调用对象的toString与基本类型进行比较如果是与boolean比较,先把true转为1,false转为0再比较。var pa = new Point(1,1);alert(pa==2);会输出"in valueOf",再输出"true";如果屏蔽掉Point.prototype.valueOf则输出"in toString",再输出"false";var pa = new Point(1,0);则pa==true;关系操作符>=,<=,>,<如果两边都是数字,或者可以转化为数字,则比较数字。如果两边都是string,或者可以转化为string,则比较string。如果一边可转为string,一边可转为number,则再试图把string转为number再比较,如果string不能转为number, 则为NaN,返回false.如果有object参与比较,则总是试图转object为number或string再比较。下面有一个有趣的例子:function Point(x,y){ this.x = x; this.y = y;};
Point.prototype.toString = function(){ alert("in toString"); return "x=" + this.x + " y=" + this.y;};
Point.prototype.valueOf = function(){ alert("in valueOf"); return this.x+this.y;};var pa = new Point(1,1);var pb = new Point(1,1);则(pa==pb)==false;(pa>pb)==false;(pa<pb)==false;但是:(pa>=pb) == true;(pa<=pb) == true;
推荐阅读
ExtJS 2.0实用简明教程 之获得ExtJS
网址http://extjs.com/download,进入下载页面可以看到大致如图xxx所示的内容,可以选择选择1.1或2.0版本,本教程使用的2.0版本。
图1-1 ExtJs不同版本下载选择页面
单击上图中的【Download ext-2.0.zi>>>详细阅读
本文标题:javascript 对象比较实现代码
地址:http://www.17bianji.com/kaifa2/JS/28763.html
1/2 1