未加星标

[]==''返回?为什么?运算符==进行了什么操作?

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

如果你看《javascript权威指南第6版》的话,从75-76页里面关于==的转换


[]==''返回?为什么?运算符==进行了什么操作?

上图的意思就是

if (两个操作数的类型是相同){ 同严格相等的比较规则一样(以下文会解释严格相等的比较规则) } else if(两个操作数的类型不相同){ if(null == undefined) { return true; }else if(a是数字,b是字符串){ 将字符串转换为数字,然后使用转换后的值进行比较。 }else if(两个值中有一个是true的话){ 将其转换为1再进行比较 }else if(两个值中有一个是false的话){ 将其转换为0再进行比较 }else if(如果一个值是对象,另一个值是数字或字符串){ 将对象转换为原始值,转换规则在《Javascript权威指南第6版》书52页已经说明,下文具体说到对象转换为原始值的步骤 } } 复制代码 综合上文所说,[]=='' 属于最后一种情况. 对象转换为原始值步骤 对象转换到布尔值 直接将对象转成true 复制代码 对象转换到字符串 if(对象具有tostring()方法){ 如果返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。 }else if(对象具有valueOf()方法){ 会调用valueOf()方法.将其结果返回 }else{ 抛出异常 } 复制代码 对象转换到数字 if(对象具有valueOf()方法){ 会调用valueOf()方法.将其结果返回 }else if(对象具有tostring()方法){ 如果返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。 }else{ 抛出异常 } 复制代码

注意对于空数组以及单个元素的数组会转换成一个数字。数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成为数字0.――来自《javascript权威指南》第55页。

严格相等的比较规则
[]==''返回?为什么?运算符==进行了什么操作?

上图的意思是

if (两个值类型不相同){ return false; } else if(null/undefined/true/false){ return true }else if(两个值其中之一为NaN){ return false; }else if(两个值都为数值且值相等){ return true; }else if(两个值都为字符串且值相等 ){ return true; }else if(两个值都指向同一个引用类型 ){ return true; } 复制代码 常见的==比较例子

123 == 123; //true '123' == 123; //true,'123'会转成成数值123 false == 0; //true,false 转成数值就是0 'a' == 'A'; //false,转换后的编码不一样 123 == {}; //false,valueOf()会改变 123 == NaN; //false,只要有NaN,都是false {} == {}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同 null == undefined //true 'NaN' == NaN //false 123 == NaN //false NaN == NaN //false false == 0 //true true == 1 //true true == 2 //false undefined == 0 //false null == 0 //false '123' == 123 //true '123' === 123 //false 复制代码

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

分页:12
转载请注明
本文标题:[]==''返回?为什么?运算符==进行了什么操作?
本站链接:https://www.codesec.net/view/620888.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(11)