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 相关文章推荐
脚本安需导入(装载)的三种模式的对比
Jun 24 Javascript
通过上下左右键和回车键切换光标实现代码
Mar 08 Javascript
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
javascript屏蔽右键代码
May 15 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 Javascript
vue实现书本翻页动画效果实例详解
Apr 08 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调用Webservice思路及源码分享
2014/06/04 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
js常用排序实现代码
2010/12/28 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
总结js函数相关知识点
2018/02/27 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
Vue实现验证码功能
2019/12/03 Javascript
Python的另外几种语言实现
2015/01/29 Python
python版本的读写锁操作方法
2016/04/25 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python制作动态字符图的实例
2019/01/27 Python
python psutil监控进程实例
2019/12/17 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
Python中and和or如何使用
2020/05/28 Python
python中rb含义理解
2020/06/18 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
小学班主任寄语大全
2014/04/04 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
青岛导游词
2015/02/12 职场文书
2015年预算员工作总结
2015/05/14 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python