js基本类型、对象的各自比较

来源:互联网 发布:2015网络作家收入 编辑:程序博客网 时间:2024/05/16 06:45

Js 作为弱类型语言,对变量类型并不“感冒”,所以要比较两个变量是否相同要怎么操作呢?

1.       比较两个字符串是否相等

var   str1   =   "aaa"; 

var   str2   =   "aaa";   

if(str1   ==   str2)alert("ok");

如果两个变量属于不同类型呢?毕竟 js 还是有 bool,string,number 基本类的

Alert(1==’1’) ,打出的结果是 true ,这说明这些基本类型在底层都是以相同的格式存储的

2.       Js 里面的对象比较

js 中的对象比较和 java 中是一样的,只有地址相同才相等。当比较两个引用值时,比较的是两个引用地址,看它们引用的原值是否为同一个副本,而不是比较它们的原值字节是否相等。只有 string 、 number 、 boolean 三种基本类型才是可以直接对值进行比较。

 

下面是从网上找的一段很好的例子

感谢作者: http://www.jb51.net/article/17912.htm

比较符 :==,!=,===,!==,>=,<=,>,<

== 总是试图比较他们的值,如果类型不一样,总是试图作转化。

=== 比较同一性,不作转化就比较

== 如果是基本类型 (string, number, boolean) ,比较他们的值,

1. 基本类型比较

var a = "123";

var b = 123;

则 (a==b) = true;

(a===b) = false;

2. 对象比较

如果是 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, undefined

var 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;

 

3. 比较对象的转换顺序

如果一个 object 和一个基本类型比较 , 则先调用对象的 valueOf, 再调用对象的 toString 与基本类型进行比较。也就是说先转成 number 型,再转成 string 类型

如果是与 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

0 0
原创粉丝点击