- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动力节点java——通过一张简单的图 ,让你彻底地、永久地
搞懂 JS 的==运算
大家知道 ,JavaScript 中的==是一种比较复杂运算 ,它的运算规则很奇怪 ,很
容易让人犯错 ,从而成为JavaScript 中 “最糟糕的特性”之一。
在仔细阅读 ECMAScript 规范的基础上 ,我画了一张图我想等你理解了这张图
后 ,会彻底地弄懂关于==运算的一切。同时 ,我试图通过此文向大家证明==并
不是那么糟糕的东西 ,它很容易掌握 ,甚至看起来很合理 ,并没那么糟糕。
先上图 :
图 1 == 运算规则的图形化表示
==运算规则的精确描述在此 :The Abstract Equality Comparison
Algorithm。但是 ,这么复杂的描述 ,你确定看完后脑子不晕 ?确定立马就能拿
它指导实践 ?
肯定不行 ,规范毕竟是给 JavaScript 运行环境的开发人员看的(比较 V8 引擎的
开发人员们) ,而不是给语言的使用者看的。而上图正是将规范翻译成了方便大
家看的形式。
在详细介绍图 1 中的每个部分前 ,我们来复习一下 JS 中关于类型的知识 :
1 ,JS 中的值有两种类型 :基本类型、对象类型。
2 ,基本类型包括 :Undefined、Null、Boolean、Number和 String等五种类
型。
3 ,Undefined类型和 Null类型的都只有一个值 ,即undefined和 null ;Boolean
类型有两个值 :true和 false ;Number类型的值有很多很多 ;String类型的值
有无数个值(理论上)。
4 ,所有对象都有 valueOf()和 toString()方法 ,它们继承自Object ,当然也可
能被子类重写。
5 ,现在考虑表达式 :
x y
其中x 和 y 是六种类型中某一种类型的值。
当x 和 y 的类型相同时 ,x ==y 可以转化为 x ===y ,而后者是很简单的(唯一
需要注意的可能是 NaN) ,所以下面我们只考虑 x 和 y 的类型不同的情况。
一. 有和无
在图 1 中 ,JavaScript 值的六种类型用蓝底色的矩形表示。首先它们被分成了两
组 :
String、Number、Boolean和 Object (对应左侧的大矩形框)
Undefined和 Null (对应右侧的矩形框)
分组的依据是什么 ?我们来看一下 ,右侧的 Undefined和 Null是用来表示不确
定、无或者空的 ,而右侧的四种类型都是确定的、有和非空。我们可以这样说 :
左侧是一个存在的世界 ,右侧是一个空的世界。
所以 ,左右两个世界中的任意值做==比较的结果都是 false是很合理的。(即图
1 中连接两个矩形的水平线上标的false)
二. 空和空
JavaScript 中的 undefined和 null是另一个经常让我们崩溃的地方。通常它被
认为是一个设计缺陷 ,这一点我们不去深究。不过我曾听说 ,JavaScript 的作者
最初是这样想的 :
假如你打算把一个变量赋予对象类型的值 ,但是现在还没有赋值 ,那么你可以用 null表
示此时的状态(证据之一就是 typeof null 的结果是object) ;相反 ,假如你打算把一个
变量赋予原始类型的值 ,但是现在还没有赋值 ,那么你可以用 undefined 表示此时的状
态。
不管这个传闻是否可信 ,它们两者做==比较的结果是 true也是很合理的。(即
图 1 中右侧垂直线上标的true)
在进行下一步之前 ,我们先来说一下图 1 中的两个符号 :大写字母 N和 P。这
两个符号不是 PN节中正和负的意思。而是 :
N表示 ToNumber操作 ,即将操作数转为数字。它是 ES规范中的抽象操作 ,
但我们可以用JS 中的 Number()函数来等价替代。
P表示 ToPrimitive操作 ,即将操作数转为原始类型的值。它也是 ES规范中的
抽象操作 ,它也可以翻译成等价的JS代码。不过稍微复杂一些 ,简单说来 ,对
于一个对象 obj :
ToPrimitive(obj)等价于 :先计算 obj.valueOf() ,如果结果为原始值 ,则返回此结果 ;
否则 ,计算 obj.toString() ,如果结果是原始值 ,则返回此结果 ;否则 ,抛出异常。
您可能关注的文档
- 对象序列化与反序列化.docx
- 08 SQL与SQLPlus-3.ppt
- 分布式系统和其应用技术的研究.pdf
- 一种面向健壮性瞬时功耗建模方法.pdf
- 编译原理3.3.3-2 NFA确定化.ppt
- 口语法与情景法.ppt
- 再论当代语言学发展趋势.pdf
- 用 PHP 与 XML 进行 iPhone 开发教程.pptx
- 函数在开区间上的最大值及最小值.pdf
- 公文处理及写作( 授课提纲).ppt
- 2024计算机操作员试题预测试卷及参考答案详解(名师推荐).docx
- 国家电网招聘考试测试卷参考答案详解.docx
- 国家电网招聘考试预测复习附参考答案详解(预热题).docx
- 国家电网招聘考试自我提分评估附参考答案详解(研优卷).docx
- 2025年会计硕士常考点试卷【综合题】附答案详解.docx
- 国家电网招聘考试考试彩蛋押题及答案详解(最新).docx
- 2025年国家电网招聘考试题库往年题考附答案详解.docx
- 国家电网招聘考试自我提分评估【考点提分】附答案详解.docx
- 2025年国家电网招聘考试模拟试题含答案详解.docx
- 2024国家电网招聘考试通关考试题库含答案详解(达标题).docx
最近下载
- 医院手术分级目录.xls VIP
- 《增强小学生英语口语能力的实践与研究》结题报告.docx VIP
- 糖尿病饮食的实施糖尿病饮食治疗.pptx VIP
- (高清版)-B-T 34590.1-2022 道路车辆 功能安全 第1部分:术语.pdf VIP
- 餐饮业员工流失现状及解决对策研究——以季季红餐饮管理有限公司为例.doc VIP
- 电泳电压、时间与膜厚关系的试验与探讨.pdf VIP
- 材料电化学教学(浙大)电化学测试基础知识.pdf VIP
- 银行合规内控管理体系建设项目实施建议书.docx VIP
- 天线与电波传播天线基础知识.pptx VIP
- 2025年质量员-土建方向-通用基础(质量员)证考试题库及答案.pdf VIP
文档评论(0)