js基本类型、对象的各自比较
来源:互联网 发布:2015网络作家收入 编辑:程序博客网 时间:2024/05/16 06:45
Js 作为弱类型语言,对变量类型并不“感冒”,所以要比较两个变量是否相同要怎么操作呢?
1. 比较两个字符串是否相等
var str1 = "aaa";
var str2 = "aaa";
if(str1 == str2)alert("ok");
如果两个变量属于不同类型呢?毕竟 js 还是有 bool,string,number 基本类的
Alert(1==’1’) ,打出的结果是 true ,这说明这些基本类型在底层都是以相同的格式存储的
2. Js 里面的对象比较
js 中的对象比较和 java 中是一样的,只有地址相同才相等。当比较两个引用值时,比较的是两个引用地址,看它们引用的原值是否为同一个副本,而不是比较它们的原值字节是否相等。只有 string 、 number 、 boolean 三种基本类型才是可以直接对值进行比较。
下面是从网上找的一段很好的例子
感谢作者: http://www.jb51.net/article/17912.htm
比较符 :==,!=,===,!==,>=,<=,>,<
== 总是试图比较他们的值,如果类型不一样,总是试图作转化。
=== 比较同一性,不作转化就比较
== 如果是基本类型 (string, number, boolean) ,比较他们的值,
1. 基本类型比较
var a = "123";
var b = 123;
则 (a==b) = true;
(a===b) = false;
2. 对象比较
如果是 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;
3. 比较对象的转换顺序
如果一个 object 和一个基本类型比较 , 则先调用对象的 valueOf, 再调用对象的 toString 与基本类型进行比较。也就是说先转成 number 型,再转成 string 类型
如果是与 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
- js基本类型、对象的各自比较
- js基本类型、对象的各自比较
- js基本类型、对象的比较
- 对象,基本类型的比较
- Java 基本类型 和 对象类型 比较
- java 对象类型与基本数据类型传参的比较
- java 对象类型与基本数据类型传参的比较
- 两个List比较各自对象的属性相同的问题
- js判断基本类型&对象类型
- JS的基本类型
- [疯狂Java]面向对象:基本类型的包装器类型、自动装箱/拆箱、包装器类型大小/相等比较
- 1.基本的对象类型
- Java基本类型与C++基本类型的一些比较
- [ JS 进阶 ] 基本类型 引用类型 简单赋值 对象引用
- js基本类型 引用类型 简单赋值 对象引用
- js基本类型 引用类型 简单赋值 对象引用
- js的基本类型和引用类型
- 浅析基本类型和对象应该使用什么做比较
- 平板N710无限重启解决办法——包括恢复出厂设置的办法
- poj 1953:World Cup Noise
- 视频转码中遇到的坑
- Ajax相关知识(续)
- DATAGRIDVIEW 合并表头
- js基本类型、对象的各自比较
- 2-9 数据统计
- Codeforce 4D - Mysterious Present
- 【LINUX】linux 主机安全等级配置
- UVa:1267 Network
- Unique Binary Search Trees
- iOS UIBezierPath类 介绍
- TCP/IP详解学习笔记 这位仁兄写得太好了
- codeforces 400B - Inna and New Matrix of Candies