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基础知识(三)BOM,DOM总结
Sep 29 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
Jun 06 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
基于vue循环列表时点击跳转页面的方法
Aug 31 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
Sep 25 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
vue常用高阶函数及综合实例
Feb 25 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 调试工具Debug Tools
2011/04/30 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
React快速入门教程
2017/01/17 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
详解Python模块化编程与装饰器
2021/01/16 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
linux面试相关问题
2012/08/11 面试题
学生会个人自荐书范文
2014/02/12 职场文书
反对邪教标语
2014/06/30 职场文书
初三英语教学计划
2015/01/23 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL