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 相关文章推荐
js几个不错的函数 $$()
Oct 09 Javascript
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
JS TextArea字符串长度限制代码集合
Oct 31 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php图像验证码生成代码
2017/06/08 PHP
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
全面理解闭包机制
2016/07/11 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
浅谈Python的文件类型
2016/05/30 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
新浪微博实习心得体会
2014/01/27 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
毕业酒会致辞
2015/07/29 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
2016年教师新年寄语
2015/08/18 职场文书
八年级作文之感恩
2019/11/22 职场文书