JavaScript的==和===运算符
2016-07-14 15:18
381 查看
[align=justify]JavaScript提供两个相等运算符:==和 ===。[/align]
[align=justify] 简单说,它们的区别是相等运算符( ==)比较两个值是否相等,严格相等运算符( ===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符( ===)直接返回 false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。[/align]
[align=justify] [/align]
[align=justify] * 等于运算符运算规则[/align]
[align=justify] 对于一个等于表达式: x==y[/align]
[align=justify] 1.当x 和y为同一类型时:[/align]
[align=justify] (1 )如果x的类型是 undefined,则返回true ;[/align]
[align=justify] (2 )如果x的类型是 null,则返回true ;[/align]
[align=justify] (3 )如果x的类型是 number,则[/align]
[align=justify] a. 如果x是 NaN,则返回 false[/align]
[align=justify] b. 如果y是 NaN,则返回 false[/align]
[align=justify] c. 如果x是和 y数值一样的 number,则返回true[/align]
[align=justify] d. 如果x是 +0, y是 -0,则返回 true[/align]
[align=justify] e. 如果x是 -0, y是 +0,则返回 true[/align]
[align=justify] f. 其它情况则返回 false;[/align]
[align=justify] (4 )如果x的类型是 string,则只有当x 和y为同样的字符串(相同长度和相同字符在相应的位置)时,返回 true,否则返回false[/align]
[align=justify] (5 )如果x类型是 boolean类型,则只有当x和 y同时为 true或者同时为false 时,返回true,否则返回 false;[/align]
[align=justify] (6 )当x和 y指向同一个对象时,返回 true,否则返回false ;[/align]
[align=justify] 2.当x 为null, y为 undefined,返回true ;[/align]
[align=justify] 3.当x 为undefined, y为 null,返回true ;[/align]
[align=justify] 4.当x 为number类型, y为 string类型时,返回 ToNumber(x) == y 的比较结果;[/align]
[align=justify] 5. 当x为 string 类型,y 为number 类型时,返回 x== ToNumber(y) 的比较结果;[/align]
[align=justify] 6. 当x的类型为 boolean类型时,返回 ToNumber(x) == y 的比较结果;[/align]
[align=justify] 7. 当y的类型为 boolean类型时,返回 x== ToNumber(y) 的比较结果;[/align]
[align=justify] 8. 如果x是 string类型或者是number 类型,y是对象,则返回 x == ToPrimitive(y)的比较结果 ;[/align]
[align=justify] 9. 如果x是对象 ,y是 string类型或者是number 类型,则返回 ToPrimitive(x) == y.的比较结果 ;[/align]
[align=justify] 10. 其它情况,则返回 false。[/align]
[align=justify] 注: 在 [] == 0 或者 [] == false 的时候,空数组被转换成了0。但是如果直接使用 if([ ]){ } 的时候, 空数组又被认为是true的。 [/align]
eg:Boolean([])==true;//true
[]==0;//true
[]==false;//true
[]==true;//false
Boolean('0')==true;//true
"0"==true;//false
0==null;//false
0==false;//true
Boolean(null)==false;//true
null==true;//false
null==false;//false
Boolean(undefined)==false;//true
undefined==true;//false
undefined==false;//false
Boolean({})==true;//true
({})==true;//false
({})==true;//false
[align=justify] *严格等于运算符运算规则[/align]
对于一个等于表达式: x===y
(1)如果x和y的类型不同,则返回false;
(2)如果x的类型 为undefined,则返回true;
(3)如果x的类型为Null,则返回true;
(4)如果x的类型为Number,则
a.如果x为NaN,则返回false;
b.如果y为NaN,则返回false;
c.如果x是和y一样的Number类型,且数值相同,则返回true;
d. 如果x是 +0, y是 -0,则返回 true;
[align=justify] e. 如果x是 -0, y是 +0,则返回 true;[/align]
[align=justify] f.其它情况返回false;[/align]
[align=justify] (5)如果x的类型为string,只有当x和y都为string类型,且具有相同长度和相同字符在相同的位置,则返回true,否则返回false;[/align]
[align=justify] (6)如果x为boolean类型,则只有当x和 y同时为 true或者同时为false 时,返回true,否则返回 false;[/align]
[align=justify] (7)当x和 y指向同一个对象时,返回 true,否则返回false ; [/align]
eg:({}==={});//false
[]===[];//false
(function (){} === function (){});//false
null===null;//true
undefined===undefined;//true
NaN === NaN;//false
var v1 = {}; var v2 = v1; v1 === v2;//true
[align=justify] 简单说,它们的区别是相等运算符( ==)比较两个值是否相等,严格相等运算符( ===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符( ===)直接返回 false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。[/align]
[align=justify] [/align]
[align=justify] * 等于运算符运算规则[/align]
[align=justify] 对于一个等于表达式: x==y[/align]
[align=justify] 1.当x 和y为同一类型时:[/align]
[align=justify] (1 )如果x的类型是 undefined,则返回true ;[/align]
[align=justify] (2 )如果x的类型是 null,则返回true ;[/align]
[align=justify] (3 )如果x的类型是 number,则[/align]
[align=justify] a. 如果x是 NaN,则返回 false[/align]
[align=justify] b. 如果y是 NaN,则返回 false[/align]
[align=justify] c. 如果x是和 y数值一样的 number,则返回true[/align]
[align=justify] d. 如果x是 +0, y是 -0,则返回 true[/align]
[align=justify] e. 如果x是 -0, y是 +0,则返回 true[/align]
[align=justify] f. 其它情况则返回 false;[/align]
[align=justify] (4 )如果x的类型是 string,则只有当x 和y为同样的字符串(相同长度和相同字符在相应的位置)时,返回 true,否则返回false[/align]
[align=justify] (5 )如果x类型是 boolean类型,则只有当x和 y同时为 true或者同时为false 时,返回true,否则返回 false;[/align]
[align=justify] (6 )当x和 y指向同一个对象时,返回 true,否则返回false ;[/align]
[align=justify] 2.当x 为null, y为 undefined,返回true ;[/align]
[align=justify] 3.当x 为undefined, y为 null,返回true ;[/align]
[align=justify] 4.当x 为number类型, y为 string类型时,返回 ToNumber(x) == y 的比较结果;[/align]
[align=justify] 5. 当x为 string 类型,y 为number 类型时,返回 x== ToNumber(y) 的比较结果;[/align]
[align=justify] 6. 当x的类型为 boolean类型时,返回 ToNumber(x) == y 的比较结果;[/align]
[align=justify] 7. 当y的类型为 boolean类型时,返回 x== ToNumber(y) 的比较结果;[/align]
[align=justify] 8. 如果x是 string类型或者是number 类型,y是对象,则返回 x == ToPrimitive(y)的比较结果 ;[/align]
[align=justify] 9. 如果x是对象 ,y是 string类型或者是number 类型,则返回 ToPrimitive(x) == y.的比较结果 ;[/align]
[align=justify] 10. 其它情况,则返回 false。[/align]
[align=justify] 注: 在 [] == 0 或者 [] == false 的时候,空数组被转换成了0。但是如果直接使用 if([ ]){ } 的时候, 空数组又被认为是true的。 [/align]
eg:Boolean([])==true;//true
[]==0;//true
[]==false;//true
[]==true;//false
Boolean('0')==true;//true
"0"==true;//false
0==null;//false
0==false;//true
Boolean(null)==false;//true
null==true;//false
null==false;//false
Boolean(undefined)==false;//true
undefined==true;//false
undefined==false;//false
Boolean({})==true;//true
({})==true;//false
({})==true;//false
[align=justify] *严格等于运算符运算规则[/align]
对于一个等于表达式: x===y
(1)如果x和y的类型不同,则返回false;
(2)如果x的类型 为undefined,则返回true;
(3)如果x的类型为Null,则返回true;
(4)如果x的类型为Number,则
a.如果x为NaN,则返回false;
b.如果y为NaN,则返回false;
c.如果x是和y一样的Number类型,且数值相同,则返回true;
d. 如果x是 +0, y是 -0,则返回 true;
[align=justify] e. 如果x是 -0, y是 +0,则返回 true;[/align]
[align=justify] f.其它情况返回false;[/align]
[align=justify] (5)如果x的类型为string,只有当x和y都为string类型,且具有相同长度和相同字符在相同的位置,则返回true,否则返回false;[/align]
[align=justify] (6)如果x为boolean类型,则只有当x和 y同时为 true或者同时为false 时,返回true,否则返回 false;[/align]
[align=justify] (7)当x和 y指向同一个对象时,返回 true,否则返回false ; [/align]
eg:({}==={});//false
[]===[];//false
(function (){} === function (){});//false
null===null;//true
undefined===undefined;//true
NaN === NaN;//false
var v1 = {}; var v2 = v1; v1 === v2;//true
相关文章推荐
- JSP中post和get乱码解决方法
- es6新特性学习
- 完全弄懂js函数中的属性特点
- js数据类型+js作用域
- escape()、encodeURI()、encodeURIComponent()区别详解
- bzoj1822: [JSOI2010]Frozen Nova 冷冻波
- javaScript基础知识
- 解析心知天气API接口返回的json数据
- 200多个js技巧代码
- sea.js
- js 原声制作进度条
- javaScript入门(二)-javaScript 基本语法结构
- BZOJ 1015 [JSOI2008]星球大战starwar
- 用javascript正则表达式判断一个串是否存在特殊字符
- 关于js自动获取input file的文件名称
- JavaScript-运算符
- JavaScript Functions that Return Functions
- js写的3D玫瑰花
- js点击空白关闭弹出层
- 五分钟学会 Canvas 基础(一)