javascript核心读有句意义
在Javascript中,表达式是一个短语,语句(语句)是一个句子或顺序。表达式计算一个值,但是语句使某事发生。
要使一件事情发生的方式之一是计算副作用的表达式。这些表达式有副作用如赋值和函数调用可以作为单独的报表。这个表达式的使用作为一个语句也被称为一个表达式语句(语句)。类似的陈述和声明语句(声明),声明语句用于声明新的变量或定义新的功能。
Javascript程序是一系列可执行语句的集合,默认情况下,Javascript解释器按顺序按顺序执行。另一个使事情发生的方法是更改语句的默认执行顺序:
1。条件语句(条件):可以根据表达式的值判断Javascript解释器;执行或跳过这些语句,如IF和开关语句。
2。循环语句(循环)语句:可以重复执行的语句,如while语句和for语句
三.跳转(跳转)语句:您可以让解释器跳转到程序的其他部分继续,例如中断、返回和抛出语句。
接下来,本文将介绍Javascript中的各种语句及其语法。在本章最后,对这些语句进行总结。Javascript程序不过是一组分离语句,因此Javascript语句一旦被掌握后就可以编写Javascript程序。
1。表达式语句
赋值语句是一个重要的表达式语句,它的作用是改变变量的值,就像执行赋值语句一样:例如
复制代码代码如下所示:
问候=你好+名字;
我=3;
增量运算符(++)和(-)和递减运算符赋值语句。它们的函数是改变变量的值,就像执行赋值语句一样。
复制代码代码如下所示:
计数器+;
删除操作符的重要功能是删除一个对象的属性(或数组元素),而这个属性通常用作一个句子,而不是一个复杂表达式的一部分。
复制代码代码如下所示:
删除OX;
函数调用是表达式语句的另一个大类,例如
复制代码代码如下所示:
警惕(问候);
Window.close();
虽然这些客户端函数是表达式,但是它们对Web浏览器有一定的影响,所以我们认为它也是一种声明。调用函数没有副作用是没有意义的,除非它是复杂表达式或赋值语句的一部分,例如,不可能随意丢弃余弦值;
Math.cos(X);
相反,余弦值必须分配给变量,以便将来可以使用该值。
VaR CX = math.cos(X);
同样,每行代码都用分号结束。
2。复合语句和空语句
逗号运算符可以用来连接多个表达式在一起形成的一种表达。以同样的方式,也可以将多个语句Javascript在一起形成一个复合语句(复合语句),括号中包含多个语句。因此,下面的代码行可以作为一个单独的语句,使用任何在Javascript中你想使用一个语句。
复制代码代码如下所示:
{
x = math.pi;
CX = math.cos(X);
console.log(cos(PI)=+ CX);
}
语句块有几个值得注意的地方:第一,语句块不需要分号。块中的元素语句必须以分号结尾,但不需要块。
第二,块中的行是缩进的,这是不必要的,但是一个整齐的缩进可以使代码更易读,更容易理解。
第三,Javascript没有块级作用域,语句块中声明的变量在语句块中不是私有的(参见第3章,第10节,第1节)。
合并成一个大的许多语句块中的Javascript编程很常见。类似的表达通常包含的子表达式。许多Javascript包含其他子语句。从形式上看,Javascript通常允许语句块包含一个子子句。例如while循环的循环体只能包含一个语句。使用一个语句块,可以在这个块中放置任意数量的语句,该语句可以用作语句。
在Javascript中,当一个语句被用作语句时,一个语句被使用。一个空语句(空语句)正好相反,它允许0个语句。空语句如下所示:
分号;
Javascript解释器在执行空语句时显然不执行任何操作,但实践证明,在创建空循环的循环时,空语句有时是有用的,如下面的for循环。
复制代码代码如下所示:
初始化数组a
为(i = 0;i < a.length;一个{我+ } = 0);
在这个循环中,所有操作都是在表达式0中完成的,并且不需要循环体。但是,Javascript需要在循环体中至少包含一个语句,所以这里只使用一个分号表示一个空语句。
注意:for循环的右侧的分号,while循环或语句很晦涩,这可能导致一些致命的缺陷,而这些缺陷是很难找到的。例如,下面的代码,执行,可能是作者不希望的效果:
复制代码代码如下所示:
如果((a = 0)| |(B = = 0)); / /这行没做。什么...
O = NULL;这行代码总是被执行。
如果您有一个特殊的目的来使用空语句,最好向代码中添加注释,所以更清楚的是这个空语句是有用的。
复制代码代码如下所示:
为(i = 0;i < a.length;一个{我+ } = 0) / / *空*;
三.声明
VAR和函数声明语句声明或定义变量或函数。这些语句定义和赋值的标识符(变量名和函数名),可在程序中的任何地方。一种声明本身不做任何事,但它具有重要意义:通过创建的变量和函数,代码的语义可以更好的组织。
接下来的几节将告诉var语句和函数语句,但它不包含变量和函数的所有内容。
i.var
var语句用于声明一个或多个变量,其语法如下所示:
无功name_1 { = value_1 } {,…,name_n { = value_n } }
在关键字VaR后面紧跟着要声明的变量列表之后,列表中的每个变量都可以有初始化表达式,它可以用来指定它的初始值:
复制代码代码如下所示:
var I;一个简单变量
var j = 0;变量的初始值为
变量p,q,,或两个变量
varHello+ name;初始化更复杂的表达式
var x = 2.34,y=math.cos(0.75)、r、θ; / /多变量
var x = 2,y = x;第二个变量使用第一个变量。
变量x=2,
函数(x){每个变量的返回行
y=f(x)
如果var声明出现在函数,然后定义一个局部变量的范围是这个功能。如果var语句中使用的顶层代码,它声明的全局变量在整个Javascript可见。在第三章、10节,指出全局变量是全局对象,属性并不像其他全局对象的属性,变量声明采用VaR不能删除删除。
如果var语句中的变量没有指定一个初始化表达式,那么变量的值最初是未定义的。因此,在声明语句之前变量的值是未定义的。
需要注意的是,var语句也可以用作for循环或for循环中的一部分(如循环前的变量声明所声明),例如,声明变量将提前 ),例如:
复制代码代码如下所示:
对于(var i = 0;i < 10;i++)console.log(我);
对于(var i = 0,J = 10;i < 10;i++,J)console.log(i * j);
对于(var i O)console.log(我);
注意,多次声明同一变量是无关紧要的。
ii.function
关键字函数用于声明函数,我们学习了函数表达式(4.3)。函数定义可以写成语句的形式:
复制代码代码如下所示:
函数f(x){返回x + 1 };将分配给变量。
函数f(x){返回x + 1;}包含变量名语句
函数声明的语法如下所示:
复制代码代码如下所示:
函数funcname({ { { arg1,arg2,argn } } }){
声明
}
funcname是声明的函数标识符的名称。在函数名是一个参数,参数之间用逗号隔开。当一个函数被调用时,这些标识符是指传入函数的参数。
一个函数的函数体是由一个Javascript语句与语句,无限数量和括在大括号中,定义一个函数时,函数中的语句是不执行的,它是与新的函数对象,要执行的函数被调用时,注意在函数语句的括号是必需的,这是不同于在块和其他一些语句块。即使函数体只有一个语句,它也需要用括号括起来。
复制代码代码如下所示:
功能hyteus(x,y){
返回math.sqrt(x*x+y*y);
}
Hyteus(1, 2) / / = > 2.23606797749979
函数脸(n){递归函数
如果(n 1)返回1;
返回面部(N - 1);
}
面部(11)39916800
函数的声明通常出现在Javascript代码的顶部,可以嵌套在其他函数中,但是在嵌套中,函数声明只能出现在嵌套函数的顶部,也就是说,函数定义不能出现在IF、、或其他语句中。
与var语句一样,函数声明语句创建的变量也不会被删除,但是这些变量不是只读的,变量的值可以重写。
4。条件语句
一个条件语句执行或判断指定的表达式的值是要执行跳过一些语句。这些语句的代码的决策点,有时被称为分支。如果Javascript解释器根据代码路径执行条件语句是这条路的分岔点。程序必须选择一个路径继续。
如果声明
if语句是基本控制语句。准确地说,它使程序执行条件。这种说法有两种形式:第一种是
复制代码代码如下所示:
如果(表达式)
声明
在这个表单中,判断表达式的值,如果是真的,执行语句语句,如果它是false值,则不执行语句。
复制代码代码如下所示:
如果用户名为NULL,如果用户名为NULL或未定义
用户名;定义它
需要注意的是,包含表达式括号的if语句是必需的。
Javascript语法指定if关键字和括号必须遵循括号后面的语句。但是您可以使用语句块来合成多个语句中的一个。因此,if语句的形式如下所示:
复制代码代码如下所示:
如果(!地址){
地址;
消息请发送地址
}
if语句的第二种形式引入了其他子句,当表达式的值是false的值时执行其他逻辑。
复制代码代码如下所示:
如果(表达式)
1
其他的
statement2
例如,下面的代码
复制代码代码如下所示:
如果(n=1)
console.log(1新消息);
其他的
console.log(你+ N +新消息);
当if语句与if语句嵌套时,必须确保其他语句与正确的if语句匹配:
复制代码代码如下所示:
i = j = 1;
k=2;
如果(i = j)
如果(j = k)
console.log(我及K );
其他的
console.log(我不等于J ); / /错误!!
在这个例子中,内层的if语句构成了if if语句所需的子句。但是,if和其他之间的匹配关系不清楚(只有缩进是一个提示),在这种情况下,缩进的提示是错误的,因为Javascript解释器是如此的理解。
复制代码代码如下所示:
如果(i = j){
如果(j = k)
console.log(我及K );
其他的
console.log(我不等于J );
}
像大多数编程语言一样,Javascript中if和其他的匹配规则是其他的总是与if语句相匹配。为了使示例可读,它更容易理解,更容易维护和调试,我们应该使用花括号。
复制代码代码如下所示:
如果(i = j){
如果(j = k){
console.log(我及K );
}否则将使代码更清晰的结果
console.log(我不等于J );
}
}
许多程序员习惯于在括号中使用if和if语句,就像while循环中的类似语句一样。即使每个分支只有一个语句,它也可以避免程序的模糊性。
如果Ii.else
if语句通过判断表达式的计算结果来选择两个分支中的一个。当代码中有许多分支时应该怎么做一种解决方案是使用if语句,否则如果不是一个真正的Javascript语句,但它只是一种将多个if语句连接在一起的方法。
复制代码代码如下所示:
如果(n=1){
执行代码块1
} { if(n=2)
执行代码块2
} { if(n=3)
执行代码块3
{人}
在条件为false之前,执行代码块4。
}
这段代码没有什么特别之处。它由多个if语句组成,if语句的if子句包含另一个if语句。语法等价代码可以用if语句的嵌套形式完成,但是与此相比,显然,其他语句的编写更加清晰和可取。
iii.switch
if语句在执行程序的过程中创建一个分支,如果处理多个分支可以使用其他分支,那么当所有分支依赖于相同表达式的值时,如果不是最好的解决方案,那么在多个if语句中重复表达式是非常浪费的。
开关语句适合处理这种情况,关键字开关遵循括在括号中的表达式,然后是括在括号中的一组代码。
复制代码代码如下所示:
开关(表达式){
声明
}
但是,切换语句的完整语法比这更复杂。
这是他背后的表达相关,执行该语句时,首先计算表达式的值,然后发现无论案件的条款表达作为表达式的值相同。(比较运算符,如果= = =是一样的),的情况下,它将执行相应的代码。如果没有找到匹配的情况下,它会在默认执行代码块:的标签。如果没有默认的标签,切换会跳过所有的代码块。
开关语句非常混乱。这是一个比较清楚的例子介绍。下面的开关语句等价于惟一的语句。
复制代码代码如下所示:
开关(n){
案例1:如果这里是n=1
执行代码块1
打破;
案例2:
执行代码块2
打破;
案例3:
执行代码块3
打破;
违约:
执行代码块4
打破;
}
需要注意的是,关键词打破用于每个case语句结束重要。我们将在后面介绍break语句和break语句可以使译员跳出switch语句或循环语句,开关,仅表示起点的代码被执行,但它不指定终点。如果没有break语句,然后switch语句从代码的表达式值的匹配情况下标签,依次执行下面的语句直到整个开关的代码块结束。当然,如果你在函数中使用switch语句,您可以使用返回代替休息,回来休息是用来终止switch语句,并防止从执行直到下一个案例块执行的case语句。
下面的语句接近实际的战斗,它根据值的类型将值转换为字符串。
复制代码代码如下所示:
函数转换(x){
开关(typeof x){
case'number: / /数字转换为16进制
返回x.tostring(16);
case'string:
返回++;返回双引号字符串。
默认情况下:使用其他类型的公共转换方法
返回字符串(x);
}
}
console.log(转换(100255114)) / / = > 5f9c58a
注意,在上面的两个示例中,case关键字遵循数字和字符串的直接编号。在实践中,这是开关最常见的用法,但是ECMAscript标准允许每个关键词遵循任何表达。
switch语句首先计算表达式的转换关键字后,然后计算每例表达后按从上到下的顺序,并且知道表达情况下的价值等于开关表达式的值时,是平等的。因为,对于每一种情况下的操作实际上比= = = = =运营商的身份,因此,表达的情况下,不做任何类型转换。
执行开关语句时,不能执行所有case表达式。因此,应该避免带有副作用的case表达式,例如函数调用的表达式和赋值表达式,最安全的方法是在case表达式中使用常量表达式。
如前所述,开关式不匹配所有情况下的表达式,然后执行语句块标记为默认值:如果没有默认的标签,整个开关语句跳过。在前面的例子中,默认标签都出现在交换机端,毕竟这样的标签,当然这是最合理、最普遍使用的写作风格。事实上,默认:标签可以放在switch语句中的任何地方。
5。周期。
为了理解条件语句,你可以把代码中的Javascript作为一个分支路径,循环语句是一个循环的程序路径,允许代码的一部分被重复。有四种循环语句:在Javascript中,做,,,, /将解释在一个时间。最常用的回路是数组元素的遍历(7.6将详细讨论这个周期和使用数组的类定义的特殊回路法)。
i.while
if语句是一个基本的控制语句,用于选择执行程序的分支语句:
复制代码代码如下所示:
而(表达)
声明
在执行while语句之前,Javascript解释器首先计算表达式的值。如果它的值为false,则程序将跳过逻辑语句的循环体中执行的程序的下一个语句。如果其值为真,那么循环体中语句的执行逻辑,然后计算表达式的表达式的值,以及环的种类将会继续,知道表达式的值是错误的。另一方面,表达的是执行语句时,表达式为真值,并注意使用而(真正的)创建了一个死循环。
一般来说,我们不希望Javascript重复执行相同的操作,在几乎每一个循环中,一个或多个变量被循环地迭代更改,因为这些变量被改变,每个循环执行的语句的操作是不同的。而且,如果变量在表达式中使用,每个循环表达式的值也不同,这是非常重要的。对初始值负责的表达式总是真值,循环不会结束。下面的例子表明,当回路输出0-9值。
复制代码代码如下所示:
var计数= 0;
同时(计数< 10){
console.log(计数);
计数+;
}
可以发现,在这个例子中,变量的计数初值为0,并在循环过程中,通过每次1其值增加,当循环执行十次,表达式的值为假时采用,而结束,并将执行的Javascript解释器程序的下一条语句,循环计数器变量如计数。柜台虽然经常被用来作为一个变量名,如我J K,一个更具体的语法名称应该是如果你想使代码更可读的应用。
做某事
while while循环与while循环非常相似,但它只检查循环结束时的循环表达式而不是顶部,这意味着至少执行一次循环:
复制代码代码如下所示:
做
声明
而(表达);
while循环不像while循环那样经常使用,这是因为在实践中至少要循环一次是不常见的。
复制代码代码如下所示:
功能printarray(一){
VaR len = a.length,
我= 0;
如果(= 0)
console.log(空阵);
其他的
{做
(一console.log {我});
}(++);
}
printarray({ 1,5,2,6 })
do循环与普通while循环有两种语法上的区别:第一,do循环要求使用关键字do来识别循环的开始,在转换的同时识别循环的结束,并判断循环条件。其次,与while循环不同,do循环以分号结束。如果while循环是用括号括起来的,while循环不会以分号结束。
iii.for
for语句提供了更方便的循环语句控制结构比而,语句作了一些简化常用的循环模式。大部分周期有特定的计数器变量。变量是循环开始之前初始化,然后在每个周期检查的价值。最后,计数器变量并自我增值业务,否则将被修改的周期和未来的审判结束前,这种循环计数器的三个关键操作是初始化,检测,和更新的声明中明确宣布这三个操作循环的语法部分,每使用一个表达式来表示他们的声明。语法如下:
复制代码代码如下所示:
用于(初始化;测试;增量)
声明
三表达式初始化,测试,和增量用分号分隔,他们负责初始化,循环条件的判断,并更新计数器变量。放在循环的第一行是更容易理解循环做还可以防止忘记初始化或增加计数器变量。
为了解释for循环是如何工作的,最简单的方法是列出一个等价于while循环的while循环。
复制代码代码如下所示:
初始化
当(测试){
声明
增量;
}
换句话说,初始化表达式是以前只有一次循环开始执行。一个初始化表达式应该有一个副作用(通常是一个赋值语句),Javascript也允许初始化表达式有一个可变的声明,使变量可以声明和初始化。在每个周期,测试表达式的执行而表达结果的判断来确定是否执行循环。在每个周期,测试表达式被执行,结果是否执行或不。如果测试结果为真,则执行循环体中的语句。最后,执行增量表达式。为了实用性,这里的增量表达式也必须有副作用。一般来说,赋值表达式不是由++运算符表达式组成的。
上面的while循环可以使用for循环从写入中写入。
复制代码代码如下所示:
对于(var = 0;计数< 10;计数+)
console.log(计数)
当然,有些循环更复杂,循环中多个变量同时迭代。在Javascript,这种情况必须用在逗号操作符中,它将初始化表达式和自加表达式组合成for循环的表达式。
复制代码代码如下所示:
变量I,j;
对于(i = 0,j=10;i < 10;i + +,j -)
console.log(i * j);
到目前为止,示例代码中的循环变量都是数字。当然,这个数是最常见的,但它不是必需的。下面的代码使用for循环遍历表数据结果,并返回链表中的最后一个对象(即,第一个不包含下一个属性的对象)。
复制代码代码如下所示:
函数尾(o)返回最后一个节点对象的列表
(为;o.next;O = o.next / / /空/ o.next)根据判决不执行遍历一个真值
回来啊;
}
需要注意的是,该代码不包含初始化表达式。在for循环中可以被人忽视的三种表现,但两个分号是必不可少的。如果你忽略测试表达式,那么它将是一个死循环。为同一类型,(真正的)的方式写的死循环是(;;)。
Iiii。 /
for语句使用for关键字,但它是常规for循环的一种不同类型的循环。
复制代码代码如下所示:
对于(对象中的变量)
声明
变量通常是一个变量名,也可以是一个可以产生一个左值表达式或变量的变量声明。总之,它是一个值,适用于赋值表达式左边。对象是一个表达式,和表达式的结果是一个对象,以同样的方式,声明一个语句或语句块构成的循环体。
使用for循环遍历数组元素是非常简单的。
复制代码代码如下所示:
var = { 1, 3, 5,44 };
对于(var i = 0;i < a.length;i++) / /我代表数组元素的索引
(一console.log {我}) / /每个阵元的输出
for循环用于轻松遍历对象成员属性。
复制代码代码如下所示:
对于分配给p变量的(var O p O)属性名。
console.log(P O { });每个属性 / /输出值
在这个过程中执行 /语句的Javascript解释器首先计算对象的表达。如果表达式为空或未定义,Javascript解释器会跳过循环并执行后续代码。如果表达式等于原始值,原来的值将被转换为包对象(歪对象)(3.6节),使用它。否则,表达本身已经是一个object.javascript列举在打开的对象的属性来执行循环。在每个周期,然而,Javascript计算变量表达式的值和指定属性名称(字符串)来。
需要注意的是,只要 /周期的变量的值可以作为赋值表达式,它可以是任何表达式,计算表达式的时候,即计算的值可能为每个周期是不同的。例如,你可以使用下面的代码复制所有对象的属性为一个数组:
复制代码代码如下所示:
var:x:1,y:2,z:3 };
var = a,i=0;
对于(在O中的{ } })空*;
document.write(一) / / = > X,Y,Z
Javascript数组是一种特殊的对象,所以 /环可以枚举枚举对象属性数据等指标。例如,上面的代码后添加此代码,你可以列举数据索引0,1,2:
复制代码代码如下所示:
var:x:1,y:2,z:3 };
var = a,i=0;
对于(在O中的{ } })空*;
document.write(一) / / = > X,Y,Z将被复制到一个数组中的对象的属性
因为(我在A)
document.write(我) / / = >枚举数据指标012
事实上,对于 /环并不遍历对象的所有属性,只有枚举的属性(可数),(参考6.7)。由Javascript语言核心定义的内置方法不可数。例如,所有的物体都有toString(),但 /在环不枚举的属性toString()。除了内置的方法,有对象的许多属性是内置不可数(nonenumberable)。而所有的属性和方法的代码中定义了枚举(6.7节会被提到,但ecmascript5有特殊的手段可以使财产为不可数)。
对象可以继承其他对象的属性,并且还可以对行继承的自定义属性(6.2。II)进行枚举。
如果 /环删除未列举的属性,属性不会被列举了。如果循环体定义对象的新属性,这些属性通常不枚举(but.javascript有些实现可以枚举,循环体中添加的属性。
属性的枚举顺序
ECMAscript规范没有指定的顺序 /循环枚举对象的属性。但实际上,Javascript实现主流浏览器列举了简单对象的属性,根据属性定义的顺序,和第一个定义的属性列举第一。如果一个物体在物体直接量的形式创建的,它是在直接的数量属性的出现顺序列举。有一些网和Javascript库依赖这个枚举顺序。大多数浏览器不修改命令。在下列情况下,枚举的顺序取决于具体实现(不是交互)。
1。对象继承枚举属性
2。对象具有整型数组索引的属性。
三.使用删除来删除对象的现有属性
4。与object.defineproperty改变对象的属性(或类似的方法)
6。跳
Javascript中的一类语句是一个跳转语句(跳转语句),从语句理解中,它允许Javascript执行从一个位置跳到一个位置。
中断语句是跳转到循环或另一个语句结束的一个跳转。连续语句是终止该循环执行并启动下一个循环的执行。Javascript中的语句可以被命名或标记,中断和继续可以标识目标循环或其他语句标记。
返回语句允许译员跳出函数体的执行,并提供该调用的返回值。throw语句触发器或抛出一个异常,这与尝试 / /最后语句一起使用捕捉,它指定例外代码逻辑的处理。这是一个复杂的跳跃声明,当我们抛出一个异常,程序会跳到最近的恒星封闭异常,异常的程序可以在同一个函数或调用堆栈中较高的。
接下来,描述每个跳转语句
一、标签声明
语句可以添加到标签上,该标签由语句之前的标识符和冒号组成:
标识符:声明
通过定义一个声明一个标签,你可以参考这个语句在程序中的任何地方通过一个标签名称,标签可以多个语句的定义,即使它是有用的当一个标签是一个语句块中定义,如循环语句和条件判断语句定义的循环。标签的名字,break和continue可以使用内循环退出循环或挑战直接进入下一个循环。break和continue是唯一可用于Javascript语句标签报表(本章后面是本章)。下面的例子,其中环定义了一个标签,这是由继续使用语句:
复制代码代码如下所示:
主循环:当(令牌!= NULL){
忽略此代码…
继续主循环; / /跳到下一个周期
忽略这里的代码…
}
该标识符被标注在这里必须是一个合法的Javascript标识符,而不是一个保留字。一个标签的命名空间是不同的变量或函数的命名空间,所以相同的标识符可以作为标签声明和变量名或函数名。标签声明定义只在声明工作(当然,在其条款)。声明标签及其内部标签声明不能重名,但在两个代码不是嵌套的情况下可以有相同的名字的标签和标签声明。声明还可以有一个标签,那就是,任何语句可以有多个标签。
ii.break
仅使用中断语句的功能是立即退出大多数内存循环或开关语句:
打破;
由于它可以退出循环和切换语句,所以这种中断形式只能出现在这种类型的语句中。
我们已经看到在switch语句的例子水果break语句。在环,不管什么原因,你可以使用break提前退出只要你不想继续的整个周期。当循环终止条件是非常复杂的,需要使用函数体break语句来实现这样的条件判断。它比在循环表达式中直接编写复杂终止条件要简单得多。
下面的示例遍历整个数组元素找到一个特定的值。当遍历整个数组时,它通常会退出循环。如果找到需要查找的数组元素,则使用中断语句退出循环。
复制代码代码如下所示:
对于(var i = 0;i < a.length;i++){
如果({目标)断;
}
还允许Javascript在中断关键字之后遵循语句标签(仅标识符、无冒号)。
打破labelname;
休息时,和标签的使用,程序会跳转到标签识别的语句块结束,或直接终止封闭块的执行。在没有封闭块指定用于打破标签,语法错误会产生。使用这种形式的语句时,标签的陈述不应被循环或switch语句,因为break语句跳出任何封闭的语句块。这里的语句可以是一组语句的括号设置,使用相同的标签来识别一组语句。
break关键字和labelname不能改变。因为Javascript语句可以自动完成省略分号,如果没有break关键字和标签之间的一条线,Javascript解释器会认为你在休息的最简单的形式的标签,所以休息后将添加一个分号。
当您想通过中断跳出非临近循环或切换语句时,使用基于标签的断点语句:
复制代码代码如下所示:
var = GetData(矩阵); / /得到一个二维数组从某处
矩阵中的所有元素{和}求和
var总和= 0,
成功=假;
从签名开始,在报上启动程序是错误的。
compure_sum:如果(矩阵){
对于(var x = 0;x<matrix.length;x++){
var行=矩阵{ };
如果(!行)打破compure_sum;
对于(var y = 0;Y<row.length;Y + +){
var单元格=行{ };
如果(isnan(细胞))打破compure_sum;
总和=单元;
}
}
成功=真实;
}
在这一点上跳转语句中断。
如果到达这里,我们给出了矩阵中的错误
否则,矩阵总和中的所有元素
最后,重要的是要注意,不管没有标签的中断语句,它的控制不能跨越函数的边界。例如,对于带有标签的函数定义语句,您不能通过函数通过标签跳转到函数的外部。
iii.continue声明
连续语句与中断语句非常相似,但它不退出循环,而是执行下一个循环。
继续;
连续语句也将有一个标签。
继续lebname;
不管带或不带标签的连续语句,它只能在循环体中使用,并且在其他地方使用语法将是语法的。
执行连续语句时,终止当前循环逻辑,然后执行下一个循环。在不同类型的循环中,继续的行为也不同。
1。在while循环中,表达式将在循环的开头重复,如果测试结果为真,则循环经验从零开始执行。
2。在做/ while循环中,程序的执行是现在跳到循环的结束,当循环条件重新判断,然后在下一个周期将持续。
三.在for循环中,首先计算自增表达式,然后检测测试表达式以确定是否执行循环体。
4。在for循环中,循环开始遍历下一个属性名,该属性名被赋给指定的变量。
我们需要注意while和for循环中的连续语句之间的区别。while循环直接进入下一轮循环条件的判断,但环首先计算计算器增量表达式,然后确定循环条件。上一节所讨论的循环行为相当于while循环。但因为继续不同的行为在这两个周期,这是不可能的完美模拟的循环周期。
下面的代码显示标签的continue语句,创建一个错误,跳过了电流环的后续逻辑
复制代码代码如下所示:
为(i = 0;i < data.length;i++){
如果(数据{我继续!);未定义的数据处理
总计=数据{ };
}
类似的语句,标签的continue语句可以嵌套循环跳出层次嵌套循环逻辑。同样的,类似的语句,有continue语句和labname之间没有线。
iiii.return
请记住,函数调用是一个表达式,所有表达式都有值。函数中的返回语句引用函数调用后的返回值:
返回表达式;
返回语句只能出现在函数体中,如果不是,它将报告语法错误。当返回语句执行时,函数终止执行,并将表达式的值返回给调用者:
复制代码代码如下所示:
函数的平方(x){返回函数包含一个返回语句函数
执行方(4) 16
如果没有return语句,函数调用顺序执行的每个语句的功能直到函数结束,和调用程序终于回来了。在这种情况下,调用的表达式的结果是未定义的。返回语句经常出现在函数的最后一句话,但这并不意味着它必须放在函数的末尾。即使在执行返回语句时,仍然有许多代码未执行。此时,函数也返回到调用程序。
返回语句可以单独使用而不必有表达式,这样的函数也希望调用程序返回未定义的,例如:
复制代码代码如下所示:
如果参数是null或未定义的返回
如果(!o)返回;
其他逻辑
由于Javascript可以自动插入分号,所以返回关键字和后面的表达式之间没有行。
iiiii.throw声明
异常是一个信号,当某种异常情况或错误发生。例外的是信号通知错误或异常情况。捕获异常是指处理这个信号,抛出一个异常,这是一个信号,通知错误或异常。异常的捕获意味着这是信号,,采取必要的手段,从异常汇丰银行。在Javascript中,一个例外是明确时抛出运行时错误的产生或当程序使用throw语句。唯一的例外是捕获的尝试/捕捉/最后声明,内有详细的说明下一节。
抛出语句的语法如下所示:
throw表达式
表达式的值可以是任何类型的数组代表一个错误代码,或一个字符串包含一个错误消息,可以抛出。当Javascript解释器抛出一个异常,它通常使用错误类型或亚型,当然你可以使用他们。一个错误对象的错误类型熟悉的表情,和消息属性用于转换构造函数的字符串(指第三部分的错误部分)。在下面的示例中,当调用带有非法参数的函数时,会抛出一个错误对象。
复制代码代码如下所示:
函数FA(x){
如果输入参数是非法的,则抛出一个异常。
如果(x<0)抛出新的错误( x不能为负数);
或计算值,返回正常值。
对于(var = 1;x > 1;;
返回F;
}
当一个异常被抛出,Javascript解释器立即停止当前执行跳到最近的异常处理,异常处理程序是写在try / catch子句捕获/最后的声明。如果抛出一个异常没有相关的catch子句,解释器将检测到一个更高的水平封闭代码块看看它与相关的异常处理程序关联。等等,直到进入异常处理程序。
如果抛出的异常功能不处理其试试/捕捉/最后声明,这个异常会传播到调用代码的功能。在这种情况下,唯一的例外是沿着词汇结构和调用的Javascript方法栈。如果没有异常发现,Javascript将处理该异常为程序错误报告给用户。
iiiiii。试试/捕捉/最后的声明
尝试/捕捉/最后的声明是一个例外的Javascript处理机制。try子句定义的异常需要处理异常的catch语句块。后有try子句,在catch代码逻辑被调用时,试块发送异常的catch子句从某处。遵循最后块,以防止清洗规范,无论try块中的异常,并在最后块的逻辑总是被执行。虽然到最后都是可选的,try子句只杀一个,组成一个完整的语句。块试试,抓,和最后的需要有括号的,其中括号是必需的。在一个树的只有一句话se不能省略花括号。
下面的代码说明了语法和使用试试/捕捉/最后:
复制代码代码如下所示:
尝试{
一般来说,这里的代码将重启执行到尾部,没有任何问题,
但是有时抛出异常,或者直接抛出抛出语句。
或通过调用方法间接地引发异常
}
catch(e){
如果且仅当尝试抛出时,将在这里执行代码。
在这里,您可以通过本地变量e获得对错误对象或其他值的引用。
在这里,代码可以基于某些原因处理异常,也可以忽略此异常。
/ /也可以通过throw语句重新抛出异常
}
最后{
无论是否阻止异常,逻辑总是在这里,块尝试已经终止:
1)通常终止,并执行语句块的最后一条语句。
2)通过中断、继续或返回语句终止。
3)抛出异常,catch子句捕获异常。
4)抛出异常,异常不会被捕获,并继续向上传播。
}
我们注意到关键字catch跟一对圆括号,和括号是一个标识符,标识符和功能非常相似。当一个异常被捕获,这种异常关联的值(如错误对象)分配给参数。不同于普通的变量,这有一个catch子句的标识符块级的范围,这是只有在catch语句块中定义。
下面是一个更实际的试用语句语句示例。这里我们使用前面一章提到的阶乘()方法,并使用客户端Javascript方法提示符()和警报()来输入和输出。
复制代码代码如下所示:
{试
请求用户输入一个数字
值(提示符()请输入正整数
假设输入是有效的,阶乘计算
阶乘(n);
结果表明:
警报(n +)!=+ f);
} catch(前){
如果输入不合法,则执行逻辑。
document.write(Ex); / /告诉用户送什么。
}
try / catch语句这里不包含最后条款。虽然最后没有经常抓,这有时是非常有用的。但是,我们需要更详细地解释其行为。无论多少代码执行在try语句块,finally子句执行只要代码的一部分在try语句执行。通常用于清理try子句中的代码后。
注意下面的例子
复制代码代码如下所示:
{试
打印(外部尝试运行);
{试
打印(嵌套尝试运行……);
抛出错误;
} catch(e){
打印(嵌套catch捕获+ E);
扔E 再扔;
{最后}
打印(嵌套正在运行……);
}
} catch(e){
打印(外部捕获+ E);
{最后}
打印(外部最后运行);
}
脚本宿主 / /窗口进行更改,名回波(S)。
函数打印({){
document.write(S);
}
输出:
复制代码代码如下所示:
外试跑…
嵌套尝试运行…
嵌套捕捉错误
嵌套正在运行…
外抓抓错
外最后运行
7。其他语句类型。
本节讨论剩余的三个Javascript语句:宽度、调试器和严格使用。
九声明
3.10范围链(范围链),可以有序地检索的对象列表,可用于解析变量的名称。宽度语句可用于临时扩展范围链:它具有以下语法:
用(对象)
声明
这个语句将对象添加到范围链头,然后执行语句,最后返回范围链到原始状态。
严格模式(5.7。iii)禁止使用宽度。在非严格模式下,宽度语句也不被推荐,并且宽度语句可以尽可能避免。使用宽度语句的Javascript很难优化,而且它比不使用宽度的语句运行得慢。
当对象嵌套非常深时,语句通常用于简化代码编写。例如,在客户端Javascript中,可以使用以下表达式访问表单的HTML元素
文件形式{ 0 }。address.value
如果此代码多次出现,您可以使用它将表单对象添加到范围链的顶层。
复制代码代码如下所示:
使用(文档形式{ 0 }){
直接访问表单元素
名称值;
地址值;
email.value = ;
}
此方法简化了大量的输入,而不为每个变量添加一个文档. { { 0 } }前缀.这个临时对象安装在范围链上,当Javascript需要解析这样一个地址标识符时,它将在这个对象中找到.当然,不使用的语句代码可以像这样写。
复制代码代码如下所示:
var =文档。表单{ 0 };
f.name.value = ;
f.adress.value = ;
f.email.value = ;
不要忘记范围链仅在查找标识符时使用,并且在创建新变量时不使用它,并查看以下代码:
复制代码代码如下所示:
带(o)x=1;
如果对象具有属性x,那么这行代码分配1这个属性。如果没有定义属性X,这个代码是完全一样的代码,x = 1,不使用,它赋予一个局部变量或全局变量x,或创建全局对象一个新的属性。With语句提供了一种快速阅读的方式的性质,但它不创建的组织性能
Ii.debugger的声明
调试器语句通常不做任何事情。然而,当调试器可用并运行时,Javascript解释器(不必)在调试模式下运行。实际上,这个语句生成断点(断点),Javascript代码的执行在断点位置停止。此时,可以使用调速器的输出变量的值来检查调用堆栈。
例如,当调用函数f()时,使用一个未定义的参数,因此F()抛出一个异常,但是它不能定位异常所在。要帮助调试这个问题,您需要修改f():
复制代码代码如下所示:
函数f(o){
如果(未定义的调试器);此代码用于临时调试
console.log(1) / /其他部分的功能
}
(f);
此时,当调用f()没有传入参数时,程序将停止执行,通过调用调速器来检测调用堆栈并找出错误的原因。
在ecmascirpt5,调试器语句已正式加入到专业的语言,但很长一段时间,主要的浏览器厂商实现它。注意,总督是不够的,并且调试器语句不启动调试器。但如果调试器已经运行,该语句将产生断点。例如,使用Firefox插件Firebug,开始萤火虫使调试器语句可以工作。
iii.use严格
使用严格的是指令引入ecmascript5。说明不陈述(但非常接近的语句),还有使用前严格和普通语句的两个重要差异:
1、它不包含任何关键字。指令只是一个表达式,它包含一个特殊字符串的直接量,它可以是单引号或双引号。
2。它只能出现在脚本代码的开始或函数的函数体的开始,和之前的任何实体声明。但它并没有出现在脚本或函数的第一行排在第一位的,因为有可能是其他的直接表达式字符串表达式之前或使用严格的指令后,和Javascript的具体实施可以解析成译员自身的指令。在脚本或函数的第一个正规的声明后,字符串表达式语句作为一个正常的表达语句。它们不进行指令解析,也没有任何副作用。
使用严格的使用说明的目的是说明后面的代码(在脚本或函数)解析代码严格(严格的代码)。如果上层(不在任何功能)代码使用使用严格的指令,然后严格的代码。如果函数体定义的代码是严格的代码或函数体采用采用严格的指令,然后在函数体代码是严格的代码。如果eval()调用在代码eval()是严格的代码或是使用严格的代码指令执行的字符串,在eval()的代码是严格的代码。
严格的代码在执行严格的模式,ecmascript5严格的模式是一个受限制的子语言。它对语言的重要缺陷,提供强大的错误的功能和增强的安全机制。区别严格的和非严格模型如下(前三个是特别重要的)
禁止在严格模式下使用语句
在严格模式下,必须先声明所有变量,如果分配未声明的变量、函数、函数参数、catch子句参数或全局对象的属性,抛出一个引用错误异常(在一个非严格模式中,全局变量的隐式声明是向全局变量添加一个新属性)。
在严格模式下,函数中的一个值(不是方法)是未定义的(在非严格的模型中,调用函数中的这个值总是全局变量)。这个特性可以用来决定Javascript实现是否支持严格的模式。
复制代码代码如下所示:
无功hasstrictmode =(函数(){()
使用严格;
返回这个=未定义的
}();
类似地,在严格的模式下,当调用()和应用()用于调用函数时,这个值通过调用()或应用()传递第一个参数(在非严格模式下,null和未定义的值被转换为全局对象而不是对象值锁)。
严格模式,抛出分配只读属性和inexpandable对象创建成员是一种错误异常。(在非严格模式下,这些操作是简单的操作,不能报告)。
严格模式,eval(进)声明不能叫星星在一个变量或函数的定义中的代码,在非严格模式可以这样做。相反,变量和函数的定义是由eval()的范围,这是放弃了当eval()返回。
在严格的模式下,函数中的参数对象具有传入函数值的静态副本。在非严格模式下,协议对象具有一个神奇的行为,而参数中的数组元素和函数指向相同值的引用。
在严格模式下,当删除操作符遵循非法标识符(如变量、函数和函数参数)时,就会抛出语法错误。(在非严格模式下,删除不做任何操作,返回false)。
在一个严格的模式,定义两个或两个以上的直接对象同名属性将产生一个语法错误(在非严格模式没有错误)
在严格的模式,在八进制整数直接量是不允许的。(0前缀,没有0x前缀),在非严格模式,直接直接量允许八进制
在严格的模式、评价和论证的标识符作为关键词,和他们的价值观是不可以改变的。他们不能分配给这些标识符,也可以被视为变量,作为一个函数名作为函数的参数或在catch块的标识符。
在严格的模式下,调用堆栈的检测能力是有限的。在严格的模式功能,参数,调用方和arguments.callee将抛出一个类型错误异常,严格模式的功能也有来电显示和参数属性和类型错误时引发异常的两个属性访问。
8.javascript总结陈述:
语句语法:
句子
语法
目的
打破
打破{标签};
退出最里面的循环或退出开关语句,或者退出指定的语句
案例
案例表达:
在转换语句中标记语句
继续
继续{标签};
重新启动最内层的循环或从新标签指定的循环。
调试器
调试器;
断点调试
违约
违约;
马克:开关中的默认语句
做/尽管
语句(表达式);
while循环的另一种形式
空
;
不要做任何事
对于
对于(init;试验;增加)声明
短周期
对于输入/输出
对于(对象中的VaR)语句
遍历对象属性
功能
函数名(参数{ } { },{体}…)
Declaring a function
如果/其他
如果(表达式){人} 1 statement2
执行的语句或statement2
标签
标签:声明
给语句一个名称:标签
返回
返回{表达式};
从函数返回一个值
开关
开关(表达式){语句}
用案例或默认值标记多分支语句:语句
扔
throw表达式
扔
尝试
尝试{语句}
{ } } {投satements抓
{ } } {最后清理satements
捕获异常
用严格的
使用严格
对脚本和函数使用严格的模式
VaR
AVR的名字= { =表达式} { },…
声明和初始化一个或多个变量
而
同时(表达式)语句
基本循环结构
随着
用(对象)语句
扩展范围链(不赞成使用)