《红宝石》第3章“基本概念”【下】

2023-11-01 20:40
文章标签 基本概念 红宝石

本文主要是介绍《红宝石》第3章“基本概念”【下】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

3.6 语句

3.6.1  if 语句

3.6.2  do-while 语句

3.6.3  while 语句

3.6.4  for 语句

3.6.5  for-in 语句

3.6.6  label 语句

3.6.7  break 和 continue 语句

3.6.8  with 语句

3.6.9  switch 语句

3.7 函数

3.7.1  理解参数

3.7.2  没有重载

3.8 小结


本章内容

  •   流控制语句
  •   函数

上一章内容 : 《红宝石》第3章“基本概念”【上】

本文链接:《红宝石》第3章“基本概念”【上】_雨季mo浅忆的博客-CSDN博客


3.6 语句

        ECMA-262 规定了一组语句 ( 也称为 流控制语句 ) 。从本质上看,语句定义了 ECMAScript 中的主要语法,语句 通常使用 一 或 多个 关键字 来完成给定任务。语句可以很简单,例如 通知 函数 退出;也可以比较复杂,例如指定 重复执行 某个 命令 的 次数。

3.6.1  if 语句

        大多数 编程语言中 最为常用的一个语句就是 if 语句。

以下是 if 语句 的 语法 :

if (condition) statement1 else statement2

    其中的 condition ( 条件 ) 可以是 任意表达式 ;而且对这个 表达式 求值 的 结果 不一定 是 布尔值 。 ECMAScript 会 自动调用 Boolean() 转换函数 将这个 表达式 的 结果 转换 为 一个 布尔值 。如果对 condition 求值的 结果 是 true ,则执行 statement1 ( 语句1 ) ,如果 对 condition 求值 的 结果 是 false ,则执行 statement2 ( 语句2 ) 。而且这两个语句既可以是一行代码,也可以是 一个 代码块 ( 以 一对 花括号 {  }  括起来 的 多行代码 ) 请看下面的例子。

if (i > 25)alert("Greater than 25.");           // 单行语句 
else { alert("Less than or equal to 25.");  // 代码块中的语句
}

    不过,业界 普遍推崇 的 最佳实践 是 始终使用 代码块 ,即使 要执行的只有 一行代码。

因为 这样可以 消除 人们的 误解,否则可能让人分不清在不同条件下要执行哪些语句。
        另外,也可以像下面这样把整个 if 语句 写在 一行 代码中 :

if (condition1) statement1 else if (condition2) statement2 else statement3

    但我们推荐的做法则是像下面这样 :

if (i > 25) {alert("Greater than 25.");   
} else if (i < 0) { alert("Less than 0.");
} else {alert("Between 0 and 25, inclusive.");
}

3.6.2  do-while 语句

        do-while 语句是一种 后测试 循环语句,即只有在 循环体中 的 代码 执行之后,才会 测试 出口 条件。换句话说,在对 条件表达式 求值 之前,循环体内 的 代码 至少会被执行 一次。以下是 do-while 语句的语法 :

do {statement
} while (expression);下面是一个示例:var i = 0; 
do {i += 2;
} while (i < 10);alert(i);

    在这个例子中,只要 变量 i 的 值 小于 10 ,循环 就会一直继续下去。而且 变量 i 的 值 最初 为 0 ,每次 循环 都会 递增 2 。
        像 do-while 这种后测试循环语句最常用于循环体中的代码至少要被执行一次的情形。


3.6.3  while 语句

        while 语句 属于 前测试 循环 语句 ,也就是说,在 循环体内 的 代码 被执行之前,就会对 出口条件 求值 。因此,循环体内 的 代码 有可能永远不会被执行。以下是 while 语句的语法 :

while(expression) statement
// 下面是一个示例:
var i = 0;
while (i < 10) {i += 2
}

        在这个例子中,变量 i 开始时的值为 0 ,每次 循环 都会 递增 2 。而 只要 i 的 值 小于 10 ,循环 就会继续下去。


3.6.4  for 语句

        for 语句 也是一种 前测试 循环 语句 ,但它具有在执行循环之前 初始化 变量 和 定义 循环后 要执行的代码的能力。以下是 for 语句的语法 :

for (initialization; expression; post-loop-expression) statement
// 下面是一个示例:
var count =10:
for (var i = 0; i < count; i++)(alert(i);
}

    以上代码定义了变量 i 的 初始值 为 0 。只有当 条件表达式 ( i < count ) 返回 true 情况下才会进入 for 循环,因此也有可能不会执行 循环体中 的 代码。如果执行了 循环体中 的 代码,则一定会对 循环后的 表达式 ( i++ ) 求值,即 递增 i 的 值。这个 for 循环语句 与 下面的 while 语句 的 功能 相同 :

var count =10; 
var i = 0;
while (i < count) {alert(i);i++;
}

    使用 while 循环做不到的,使用 for 循环同样也做不到。也就是说,for 循环只是把与循环有关的代码集中在了一个位置。
        有必要指出的是,在 for 循环 的 变量 初始化 表达式中,也可以不使用 var 关键字。该变量的 初始化 可以在 外部执行,例如 :

var count = 10; 
var i;
for (i = 0; i < count; i++) {alert(i);
}

    以上代码与在循环初始化 表达式中 声明 变量 的 效果是一样的。由于 ECMAScript 中不存在 块级 作用域 ( 第 4 章将进一步讨论这一点 ) ,因此在 循环 内部 定义的 变量 也可以在 外部 访问到。例如 :

var count =10;
for (var i =0; i<count; i++) {alert(i);
}
alert(i)    // 10  

    在这个例子中,会有一个 警告框 显示 循环完成后 变量 i 的 值,这个值是 10。这是因为,即使 i 是在 循环 内部定义的一个变量,但在循环外部仍然可以访问到它。
        此外,for 语句中的 初始化 表达式、控制表达式 和 循环后 表达式 都是 可选的。将这三个表达式全部省略,就会创建一个无限循环,例如:

for (;;) {     // 无限循环doSomething();
}// 而只给出控制表达式实际上就把 for 循环转换成了 while 循环,例如: 
var count = 10; 
var i = 0;
for (; i < count; ) {alert(i); i++;
}

    由于 for 语句存在极大的 灵活性 ,因此它也是 ECMAScript 中最常用的一个语句。


3.6.5  for-in 语句

        for-in 语句是一种 精准 的 迭代 语句,可以 用来 枚举 对象 的 属性

以下是 for-in 语句的语法 :

for (property in expression) statement
// 下面是一个示例:
for (var propName in window) {document.write(propName);
}

    在这个例子中,我们使用 for-in 循环来显示了 BOM 中 window 对象 的 所有属性。每次执行循环时,都会将 window 对象中存在的一个 属性名 赋值给 变量 propName。这个过程会一直持续到 对象中 的 所有属性 都被 枚举 一遍为止。与 for 语句类似,这里 控制语句中 的 var 操作符 也不是必需的。但是,为了保证使用 局部变量,我们推荐上面例子中的这种做法。
        ECMAScript 对象的属性没有顺序。因此,通过 for-in 循环输出的 属性名 的 顺序 是不可预测的。具体来讲,所有 属性 都会被返回一次,但返回的 先后次序 可能会因 浏览器 而异。
        但是,如果表示要 迭代 的 对象 的 变量值 为 null 或 undefined,for-in 语句会抛出错误。 ECMAScript5 更正了这一行为;对这种情况不再抛出错误,而只是 不执行 循环体。为了保证最大限度的兼容性,建议在使用 for-in 循环之前,先检测确认该对象的值是不是 null 或 undefined。

        Safari3 以前版本的 for-in 语句中存在一个 bug,该 bug 会导致某些属性被返回两次。


3.6.6  label 语句


3.6.7  break 和 continue 语句


3.6.8  with 语句


3.6.9  switch 语句


3.7 函数

        函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。ECMAScript 中的函数使用 function 关键字 来声明,后跟一组参数以及函数体。函数的基本语法如下所示 :

function functionName(arg0, arg1, ..., argN) {statements
}

以下是一个函数示例 :

function sayHi(name, message) {alert('Hello' + name + ',' + message)
}

3.7.1  理解参数


3.7.2  没有重载


3.8 小结

        JavaScript 的核心语言特性在 ECMA-262 中是以名为 ECMAScript 的伪语言的形式来定义的。

    ECMAScript 中包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但没有对取得输入和产生输出的机制作出规定。理解 ECMAScript 及其纷繁复杂的各种细节,是理解其在 Web 浏览器中的实现——JavaScript 的关键。

  目前大多数实现所遵循的都是 ECMA-262 第 3 版,但很多也已经着手开始实现第 5 版了。以下简要总结了 ECMAScript 中基本的要素。

  • 1、ECMAScript 中的基本数据类型包括 Undefined、Null、Boolean、Number 和 String 。
  • 2、与其他语言不同,ECMScript 没有为 整数 和 浮点数值 分别定义不同的数据类型,Number 类型可用于表示所有数值。
  • 3、ECMAScript 中也有一种复杂的数据类型,即 Object 类型,该类型是这门语言中所有对象的基础类型。
  • 4、严格模式为这门语言中容易出错的地方施加了限制。
  • 5、ECMAScript 提供了很多与 C 及其他类 C语言 中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等。
  • 6、ECMAScript 从其他语言中借鉴了很多流控制语句,例如 if 语句、for 语句和 switch 语句等。 ECMAScript 中的函数与其他语言中的函数有诸多不同之处。
  • 7、无须指定函数的返回值,因为任何 ECMAScript 函数都可以在任何时候返回任何值。
  • 8、实际上,未指定返回值的函数返回的是一个特殊的 undefined 值。
  • 9、ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的。
  • 10、可以向 ECMAScript 函数传递任意数量的参数,并且可以通过 arguments 对象来访问这些参数。
  • 11、由于不存在函数签名的特性,ECMAScript 函数不能重载。

上一章内容 :《红宝石》第3章“基本概念”【上】

本文链接:《红宝石》第3章“基本概念”【上】_雨季mo浅忆的博客-CSDN博客 

这篇关于《红宝石》第3章“基本概念”【下】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325602

相关文章

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

【Rocketmq入门-基本概念】

Rocketmq入门-基本概念 名词解释名称服务器(NameServer)消息队列(Message Queue)主题(Topic)标签(Tag)生产者(Producer)消费者(Consumer)拉取模式(Pull)推送模式(Push)消息模型(Message Model) 关键组件Broker消息存储工作流程 名词解释 名称服务器(NameServer) 定义: 名称服务器

数据结构的基本概念和术语的一些介绍

数据:是客观事物的符号表示,包括两种:                  数值型(整数,实数)和非数值型(文字,图形,声音 数据元素:是数据的基本单位,通常作为一个整体进行表示。                  与数据的关系:是数据集合的个体 数据项:组成数据元素的不可分割的最小单位。 以上三者的关系:数据>数据元素>数据项                  例如:学生表>个人记录>

【DL--05】深度学习基本概念—函数式模型

函数式模型 函数式模型算是本文档比较原创的词汇了,所以这里要说一下 在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。第二种模型称为Graph,即图模型,这个模型支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。可以看到,Sequentia

【DL--04】深度学习基本概念—data_format

data_format 这是一个无可奈何的问题,在如何表示一组彩色图片的问题上,Theano和TensorFlow发生了分歧,’th’模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32),Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。这种t

【DL--03】深度学习基本概念—张量

张量 TensorFlow中的中心数据单位是张量。张量由一组成形为任意数量的数组的原始值组成。张量的等级是其维数。以下是张量的一些例子: 3 # a rank 0 tensor; this is a scalar with shape [][1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3][[1., 2., 3.]

【DL--02】深度学习基本概念--符号计算

符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号式”的库。 因此,这也使得Keras的编程与传统的Python代码有所差别。笼统的说,符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译以确定其内部细节,然而,此时的计算图还

数据结构 基本概念和述语

数据结构 基本概念和述语数据(data)数据元素(data element)数据项(data item)数据对象(data object)数据结构(data structure)逻辑结构与物理结构逻辑结构物理结构 抽象数据类型(Abstract Data Type, ADT):数据类型:抽象数据类型三元组的定义:抽象数据类型的表示与实现抽象数据类型Triplet的表示和实现: 算法和算法分析

分布式系统的一些基本概念

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 分布式 来自csdn,作者:陆小凤 进阶篇来自:bangerlee 作者对部分地方做了订正 目前这系列文章是网络上分布式