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编程起步(第七课)
Feb 27 Javascript
JavaScript 中的replace方法说明
Apr 13 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
javascript:;与javascript:void(0)使用介绍
Jun 05 Javascript
Javascript拓展String方法小结
Jul 08 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
详解JavaScript中Hash Map映射结构的实现
May 21 Javascript
JS中的多态实例详解
Oct 15 Javascript
微信公众平台获取access_token的方法步骤
Mar 29 Javascript
vue.js实现简单的计算器功能
Feb 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
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
vue实现分页加载效果
2019/12/24 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
Python生成随机密码
2015/03/10 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
Linux文件系统类型
2012/09/16 面试题
英语国培研修感言
2014/02/13 职场文书
中秋寄语大全
2014/04/11 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
护士心得体会范文
2016/01/25 职场文书
导游词之千岛湖
2019/09/23 职场文书
Redis三种集群模式详解
2021/10/05 Redis
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android