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

本文详细介绍了JavaScript中不同类型的变量如何进行比较,包括基本类型和对象类型的比较方式,并通过实例展示了比较符(==、===等)的工作原理。

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值