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 相关文章推荐
基于jQuery的倒计时插件代码
May 07 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
纯JS实现可拖拽表单的简单实例
Sep 02 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
函数式编程入门实践(一)
Apr 20 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
微信小程序静默登录的实现代码
Jan 08 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
canvas绘制折线路径动画实现
May 12 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文件缓存类用法实例分析
2015/04/22 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javascript中clone对象详解
2014/12/03 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
SQL数据库笔试题
2016/03/08 面试题
如何写早恋检讨书
2014/09/10 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
工作失职检讨书
2015/01/26 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
优秀员工自荐书
2015/03/06 职场文书
公司员工培训管理制度
2015/08/04 职场文书
简历自我评价范文
2019/04/24 职场文书
导游词之凤凰古城
2019/10/22 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Pytest中skip skipif跳过用例详解
2021/06/30 Python
Python类方法总结讲解
2021/07/26 Python
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python