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 instanceof,typeof的区别
Mar 24 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
Js遍历键值对形式对象或Map形式的方法
Aug 08 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
Vue动态组件实例解析
Aug 20 Javascript
vux uploader 图片上传组件的安装使用方法
May 15 Javascript
vue实现form表单与table表格的数据关联功能示例
Jan 29 Javascript
小程序实现自定义导航栏适配完美版
Apr 02 Javascript
javascript异步编程的六种方式总结
May 17 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 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函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python从入门到精通(DAY 1)
2015/12/20 Python
Python登录注册验证功能实现
2018/06/18 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
django修改models重建数据库的操作
2020/03/31 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
django教程如何自学
2020/07/31 Python
8种常用的Python工具
2020/08/05 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
GWT都有什么特性
2016/12/02 面试题
文明礼仪小标兵事迹
2014/01/12 职场文书
网络管理员岗位职责
2014/03/17 职场文书
学生请假条格式
2014/04/11 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
小学端午节活动总结
2015/02/11 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
《小小的船》教学反思
2016/02/18 职场文书
Java界面编程实现界面跳转
2022/06/16 Java/Android