Javascript 学习 笔记三

简介: 1、Javascript 组成:ECMAScript--JavaScript的核心,描述了语言的基本语法和对象。DOM(文档对象模型)--The Document Object Model描述了作用于网页内容的方法和接口。document的操作,比如: var lis = document.getElementsByTagName('li');BOM(浏览器对象模型):The Brow

1、Javascript 组成:

ECMAScript--JavaScript的核心,描述了语言的基本语法和对象。
DOM(文档对象模型)--The Document Object Model描述了作用于网页内容的方法和接口。
document的操作,比如:

 var lis = document.getElementsByTagName('li');
BOM(浏览器对象模型):The Browser Object Model描述了和浏览器交互的方法和接口。window的操作,比如:

window.onload = function () {
        }


2、“==”和“===”运算符(该详细介绍来自知乎林建入,原文地址:点击打开链接


一、严格相等运算符 === 的实现

=== 被称为 Strict Equals Operator,假设有表达式 a === b,则它的实际运算过程如下
  1. 计算出表达式 a 的结果,并存入 lref 变量
  2. 将 GetValue(lref) 的结果存入 lval 变量
  3. 计算出表达式 b 的结果,并存入 rref 变量
  4. 将 GetValue(rref) 的结果存入 rval 变量
  5. 执行 Strict Equality Comparison 算法判断 rval === lval 并将结果直接返回
这里的 Strict Equality Comparison 算法很关键,假设要计算的是 x === y,则过程如下

1. 如果 Type(x) 和 Type(y) 不同,返回 false

2. 如果 Type(x) 为 Undefined,返回 true

3. 如果 Type(x) 为 Null,返回 true

4. 如果 Type(x) 为 Number,则进入下面的判断逻辑

4.1. 如果 x 为 NaN,返回 false

4.2. 如果 y 为 NaN,返回 false

4.3. 如果 x 的数字值和 y 相等,返回 true

4.4. 如果 x 是 +0 且 y 是 -0,返回 true

4.5. 如果 x 是 -0 且 y 是 +0,返回 ture

4.6. 返回 false

5. 如果 Type(x) 为 String,则当且仅当 x 与 y 的字符序列完全相同(长度相等,每个位置上的字符相同)时返回 true,否则返回 false

6. 如果 Type(x) 为 Boolean,则若 x 与 y 同为 true 或同为 false 时返回 true,否则返回 false

7. 如果 x 和 y 引用的是同一个对象,返回 true,否则返回 false


二、相等运算符 == 的实现


好了,当你明白了 === 的实现之后,我们再来看看 == 的实现,比较一下他们有何不同?
== 被称为 Equals Operator (注意看没有 Strict 了),假设有表达式 a == b,则它的实际运算过程如下
  1. 计算出表达式 a 的结果,并存入 lref 变量
  2. 将 GetValue(lref) 的结果存入 lval 变量
  3. 计算出表达式 b 的结果,并存入 rref 变量
  4. 将 GetValue(rref) 的结果存入 rval 变量
  5. 执行 Abstract Equality Comparison 算法判断 rval == lval 并将结果直接返回

注意,其中的前 4 个步骤是和 === 完全相同的。唯独 5 不同。对于 === 来说,调用的是 Strict Equality Comparison 算法,但是 == 则调用的是 Abstract Equality Comparison 算法。虽然仅一词之差,但是却有质的不同,我们下面就来看看到底它是怎么实现的

假设要计算的是 x == y, Abstract Equality Comparison 计算的过程如下(很冗长,但是每个步骤都很简单)

1. 如果 Type(x) 和 Type(y) 相同,则

1.1. 如果 Type(x) 为 Undefined,返回 true

1.2. 如果 Type(x) 为 Null,返回 true

1.3. 如果 Type(x) 为 Number,则

1.3.1. 如果 x 是 NaN,返回 false

1.3.2. 如果 y 是 NaN,返回 false

1.3.3. 如果 x 的数值与 y 相同,返回 true

1.3.4. 如果 x 是 +0 且 y 是 -0,返回 true

1.3.5. 如果 x 是 -0 且 y 是 +0,返回 true

1.3.6. 返回 false

1.4. 如果 Type(x) 为 String,则当且仅当 x 与 y 的字符序列完全相同(长度相等,每个位置上的字符相同)时返回 true,否则返回 false

1.5. 如果 Type(x) 为 Boolean,则若 x 与 y 同为 true 或同为 false 时返回 true,否则返回 false

1.6. 如果 x 和 y 引用的是同一个对象,返回 true,否则返回 false

2. 如果 x 是 null 且 y 是 undefined,返回 true

3. 如果 x 是 undefined 且 y 是 null,返回 ture

4. 如果 Type(x) 为 Number 且 Type(y) 为 String,以 x == ToNumber(y) 的比较结果作为返回

5. 如果 Type(x) 为 String 且 Type(y) 为 Number,以 ToNumber(x) == y 的比较结果作为返回值

6. 如果 Type(x) 为 Boolean,以 ToNumber(x) == y 的比较结果作为返回值

7. 如果 Type(y) 为 Boolean,以 x == ToNumber(y) 的比较结果作为返回值

8. 如果 Type(x) 为 String 或 Number 且 Type(y) 为 Object,以 x == ToPrimitive(y) 的比较结果作为返回值

9. 如果 Type(x) 为 Object 且 Type(y) 为 String 或 Number,以 ToPrimitive(x) == y 的比较结果作为返回值

10. 返回 false


三、总结

从上面的算法流程可以看出,a === b 是最简单的。如果 a 和 b 的类型不同,那么一定会返回 false。而 a == b 则要灵活得多。JavaScript 会尝试调整 a 和 b 的类型,例如若 a 为字符串 b 为数字,则将字符串先转化为数字再与 b 比较,等等。这在很多时候简化了程序员的代码量。


3、JavaScript中的数据真假判断

使用if(value)判断真假的情况:

当value为undefined、null、fasle、0、空字符串(不是使用new String("")定义)时,value为假,其他情况为真。


4、for...in 语句

for...in 语句用于对数组或者对象的属性进行循环操作。
for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
语法:

for (变量 in 对象)
{
    在此执行代码
}
“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。

作者:jiankunking 出处:http://blog.csdn.net/jiankunking


相关文章
|
JavaScript 前端开发 Java
学习JavaScript笔记
学习JavaScript笔记
49 0
|
Web App开发 JavaScript 前端开发
Javascript 学习 笔记四
1、children和childNodes(参考:JavaScript中Element与Node的区别,children与childNodes的区别 children和childNodes) Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型,如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分,常见的有: 节点类型 NodeType 元
1400 0
|
JavaScript 前端开发 算法
Javascript 学习 笔记三
1、Javascript 组成: ECMAScript--JavaScript的核心,描述了语言的基本语法和对象。DOM(文档对象模型)--The Document Object Model描述了作用于网页内容的方法和接口。document的操作,比如: var lis = document.getElementsByTagName('li'); BOM(浏览器对象模型):The Brow
1439 0
|
JavaScript 前端开发
Javascript 学习 笔记二
1、查找HTML元素            通常,通过 JavaScript,您需要操作HTML 元素。      为了做到这件事情,您必须首先找到该元素。有三种方法来做这件事:      通过id找到HTML元素(本例查找 id="intro" 元素)var x=document.getElementById("intro");         通过标签名找到HTML元素(本例查找 id="
1045 0
|
6天前
|
Web App开发 人工智能 架构师
备考神器!基于通义听悟和Xmind快速生成思维导图
使用阿里通义听悟与Xmind,高效创建思维导图。通义听悟支持PDF、Word等格式文档分析,可一键转为Xmind格式。视频分析需下载,支持最大6GB,可用通义听悟插件实现在线视频内容提取。B站部分视频自带AI总结,或使用特定网站直接在线解析视频生成MD文档。结合Xmind,优化学习和工作效率。
23520 13
|
18天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
10天前
|
存储 弹性计算 监控
几百T的视频、图片数据如何更有效地存储和管理?
采用传统硬盘搭建存储方案,看起来成本低廉,但是再加上各种附加因素后却大幅攀升,而云存储厂商通常提供基于订阅的定价模型、一些免费服务和一定的折扣。现在,我们就来了解一下如何更省钱地使用云存储。
18880 26
几百T的视频、图片数据如何更有效地存储和管理?
|
11天前
|
Kubernetes Dubbo Cloud Native
将Dubbo应用部署到服务网格中
本文主要就Dubbo应用如何接入服务网格、获得各项云原生能力进行了探讨,并提出了最佳实践以及过渡两种实践场景。我们首先推荐您使用Dubbo社区提供的最佳实践场景来接入服务网格,在必要时可以通过过渡方案来向最佳实践方案逐步实现过渡。
19205 6
|
9天前
|
人工智能 自然语言处理 搜索推荐
解读阿里云搜索开发工作台如何快速搭建AI语义搜索及RAG链路
本文介绍阿里云搜索开发工作台如何通过内置数据处理、查询分析、排序、效果测评、大模型等服务,结合阿里云搜索引擎及开源引擎,灵活打造AI语义搜索及RAG链路。
19132 12
|
8天前
|
分布式计算 监控 Serverless
E-MapReduce Serverless Spark 版测评
E-MapReduce Serverless Spark 版测评
11520 9