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 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
javascript中最常用的继承模式 组合继承
Aug 12 Javascript
javascript中String类的subString()方法和slice()方法
May 24 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 Javascript
jquery实现textarea 高度自适应
Mar 11 Javascript
js转html实体的方法
Sep 27 Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 Javascript
vue项目实战总结篇
Feb 11 Javascript
vue--点击当前增加class,其他删除class的方法
Sep 15 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 Javascript
原生js实现自定义难度的扫雷游戏
Jan 22 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的中问验证码
2006/11/25 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python科学画图代码分享
2017/11/29 Python
Django的Modelforms用法简介
2019/07/27 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
函授本科自我鉴定
2014/02/04 职场文书
小学六年级学生评语
2014/04/22 职场文书
工地质量标语
2014/06/12 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
政府会议通知范文
2015/04/15 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
2016年国陪研修感言
2015/11/18 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python