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编写widget的一些技巧分享
Oct 28 Javascript
密码强度检测效果实现原理与代码
Jan 04 Javascript
JS记录用户登录次数实现代码
Jan 15 Javascript
javascript常用函数归纳整理
Oct 31 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
jQuery实现的瀑布流加载效果示例
Sep 13 Javascript
canvas实现图像放大镜
Feb 06 Javascript
使用JQ完成表格隔行换色的简单实例
Aug 25 Javascript
使用Dropzone.js上传的示例代码
Oct 10 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
Jan 18 Javascript
vue实现新闻展示页的步骤详解
Apr 11 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
php并发加锁示例
2016/10/17 PHP
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
详解javascript高级定时器
2015/12/31 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
C语言笔试集
2012/07/24 面试题
程序员经常用到的UNIX命令
2015/04/13 面试题
采购主管工作职责
2013/12/12 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
顶碗少年教学反思
2014/02/21 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技