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 学习笔记 错误处理
Jul 30 Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
读jQuery之八 包装事件对象
Jun 21 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
Dec 07 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
Sep 04 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
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 foreach、while性能比较
2009/10/15 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
js常用函数 不错
2006/09/08 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
vue的mixins属性详解
2018/03/14 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
安全检查验收制度
2014/01/12 职场文书
差生评语大全
2014/05/04 职场文书
询价采购方案
2014/06/09 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
教师个人发展总结
2015/02/11 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
春节随笔
2015/08/15 职场文书
Python如何加载模型并查看网络
2022/07/15 Python