[]==''返回?为什么?运算符==进行了什么操作?
栏目: JavaScript · 发布时间: 6年前
内容简介:如果你看《Javascript权威指南第6版》的话,从75-76页里面关于==的转换上图的意思就是综合上文所说,[]=='' 属于最后一种情况.
如果你看《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 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ES6—扩展运算符和rest运算符(6)
- C/C++三元运算符实际上是否具有与赋值运算符相同的优先级?
- Python 运算符
- Python算术运算符
- 004.Python运算符
- JavaScript③运算符
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java语言程序设计(基础篇 原书第10版)
[美]粱勇(Y.Daniel Liang) / 戴开宇 / 机械工业出版社 / 2015-7 / 85.00元
《Java语言程序设计(基础篇 原书第10版)》是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象编程、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学技术解决实际应用开发中遇到的问题。您手中的这本是其中的基础篇,主要介绍了基本程序设计、语法......一起来看看 《Java语言程序设计(基础篇 原书第10版)》 这本书的介绍吧!