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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 Javascript
代码生成器 document.write()
Apr 15 Javascript
javascript学习笔记(三)显示当时时间的代码
Apr 08 Javascript
jquery插件制作 提示框插件实现代码
Aug 17 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
浅谈js基本数据类型和typeof
Aug 09 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
vue 实现路由跳转时更改页面title
Nov 05 Javascript
jQuery实现飞机大战小游戏
Jul 05 jQuery
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
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JS修改css样式style浅谈
2013/05/06 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python变量赋值的秘密分享
2018/04/03 Python
用Python读取几十万行文本数据
2018/12/24 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
写给老师的表扬信
2014/01/21 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
公证委托书格式
2014/09/13 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
房产公证委托书范本
2014/09/20 职场文书
离职感谢信怎么写
2015/01/22 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书