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 选择器理解
Mar 16 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
jQuery绑定事件-多种实现方式总结
May 09 Javascript
由浅入深剖析Angular表单验证
Jul 14 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
BootStrap 标题设置跨行无效的解决方法
Oct 25 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
vant picker+popup 自定义三级联动案例
Nov 04 Javascript
JS class语法糖的深入剖析
Jul 07 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统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php获取linux命令结果的实例
2017/03/13 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
PyQt5实现登录页面
2020/05/30 Python
python类共享变量操作
2020/09/03 Python
python mock测试的示例
2020/10/19 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
大学生毕业自我鉴定
2013/11/06 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
小学生校园广播稿
2014/09/28 职场文书
物业保洁员管理制度
2015/08/05 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL