javascript 对象比较实现代码


Posted in Javascript onApril 27, 2009

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

如果一个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;

Javascript 相关文章推荐
Javascript 获取滚动条位置等信息的函数
Sep 08 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
深入理解jQuery中live与bind方法的区别
Dec 18 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
使用jquery解析XML示例代码
Sep 05 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
EasyUI中在表单提交之前进行验证
Jul 19 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
vue生命周期的探索
Apr 03 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
Apr 27 #Javascript
一个选择最快的服务器转向代码
Apr 27 #Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
Apr 27 #Javascript
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 #Javascript
基于jQuery图片平滑连续滚动插件
Apr 27 #Javascript
js 发个判断字符串是否为符合标准的函数
Apr 27 #Javascript
jQuery 对象中的类数组操作
Apr 27 #Javascript
You might like
PHP empty函数报错解决办法
2014/03/06 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
JS数组的高级使用方法示例小结
2020/03/14 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
Python collections模块实例讲解
2014/04/07 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
Python 寻找局部最高点的实现
2019/12/05 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
自荐信怎么写呢?
2013/12/09 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
小学老师寄语大全
2014/04/04 职场文书
房产委托公证书
2014/04/08 职场文书
干部鉴定材料
2014/05/18 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
Python中异常处理用法
2021/11/27 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server