当前位置: 首页 > news >正文

《JavaScript权威指南第六版》学习笔记-语句

语句

表达式语句

1.赋值语句是一类比较重要的表达式语句

greeting = "hello" + name;
i *= 3;复制代码

2.递增运算符(++)和递减运算符(--)

count++;复制代码

3.delete运算符的重要作用是删除一个对象的属性

delete o.x;复制代码

4.函数调用

alert(greeting);
window.close();复制代码
复合语句和空语句

1.复合语句

{
  x = Math.PI;
  cx = Math.cos(x);
  console.log("cos(π)" + cx);
}复制代码

2.JavaScript中没有块级作用域,在语句块中声明的变量并不是语句块私有的

3.当创建一个具有空循环体的循环时,空语句有时是很有用的。

//初始化一个数组a
for(i = 0; i< a.length; a[i++] = 0) ;复制代码

使用了一个单独的分号来表示一条空语句

声明语句

var和function都是声明语句,它们声明或定义变量或函数

1.var

var i;           //一个简单的变量
var j = 0;   //一个带有初始值的变量
var p,q;   //两个变量
var greeting = "hello" + name;    //更复杂的初始化表达式
var x = 2.34, y = Math.cos(0.75), r, theta;     //很多变量
var x = 2, y = x * x;    //第二个变量使用了第一个变量
var x =2,              //更多变量
    f = function(x){return x*x},    //每一个变量都独占一行
    y = f(x);复制代码

(1).如果var语句出现在函数体内,那么它定义的是一个局部变量,其作用域就是这个函数。

(2).如果在顶层代码中使用var语句,它声明的是全局变量,全局变量是全局对象的属性,var声明的变量是无法通过delete删除的。

(3).如果var语句中的变量没有指定初始化表达式,那么这个变量的值初始为undefined.

变量在声明它们的脚本或函数中都是有定义的,变量声明语句会被"提前"至脚本或者函数的顶部。但是初始化的操作则还在原来var语句的位置执行,在声明语句之前变量的值都是undefined.

for(var i = 0;i < 10; i++) console.log(i);
for(var i = 0,j = 10; i < 10;i++,j--) console.log(i*j);
for(var i in o) console.log(i);复制代码

多次声明同一个变量是无所谓的

2.function

(1).关键字function用来定义函数

var f = function(x){return x+1;}    //将表达式赋值给一个变量
function f(x){return x+1;}   //含有变量名的语句复制代码
条件语句

条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句。

1.if

if/else语句通过判断一个表达式的计算结果来选择执行两条分支中的一条

(1).

if(username == null)   //如果username是null或者undefined
username = "John Doe";   //对其进行定义

//如果username是null,undefined,false,0,"",或者NaN,那么给它赋一个新值
if(!username) username = "John Doe";

if(!adress){
  address = "";
  message = "Please specify a mailing address";
}复制代码

(2).当expression为真值时执行statement1,当expression为假值时执行statement2

if(expression){
  statement1
}else{
  statement2
}复制代码

2.else if

else if 语句并不是真正的JavaScript语句,它只不过是多条if/else语句连在一起时的一种惯用写法。

if(n == 1){
  //执行代码块1
}else if(n == 2){
  //执行代码块2
}else if(n == 3){
  //执行代码块3
}else{
  //之前的条件都为false,则执行这里的代码块4
}复制代码

3.switch

switch(n){
  case 1:                      //如果 n === 1,从这里开始执行
  //执行代码块1
  break;                    //停止执行switch语句
  case 2:
  //执行代码块2
  break;
  case 3:
  //执行代码块3
  break;
  default:          //如果所有的条件都不匹配
  //执行代码块4
}复制代码

(1).每个case的匹配操作实际上是"==="恒等运算符比较

(2).表达式和case的匹配并不会做任何类型转换

循环

循环语句(looping statement)就是程序路径的一个回路,可以让一部分代码重复执行。

JavaScript中有4中循环语句:while,do/while,for和for/in

最常用的循环就是对数组元素的遍历

(1).while

var count = 0;
while(count < 10){
  console.log(count);
  count++;
}复制代码

在几乎每一次循环中,都会有一个或多个变量随着循环的迭代而改变。

否则一个初始值为真值的表达式的值永远都是真值,循环也不会结束。

(2).do/while

它是在循环的尾部而不是顶部检测循环表达式,这就意味着循环体至少会执行一次。

function printArray(a){
  var len = a.length,i = 0;
  if(len = 0){
    console.log("Empty Array")
  }else{
    do{
      console.log(a[i])
    }while(++i < len);
  }
}复制代码

(3).for

A.大部分的循环都具有特定的计数器变量。

B.计数器的三个关键操作是初始化,检测和更新。

for(initialize;test;increment){
  statement;
}

initialize;
while(test){
  statement;
  increment;
}复制代码

C.initialize表达式只在循环开始之前执行一次。

每次循环执行之前会执行test表达式,并判断表达式的结果来决定是否执行循环体,如果test计算结果为真值,则执行循环体中的statement.

最后,执行increment表达式

for(var count=0;count<10;count++){
  console.log(count);
}复制代码

D.逗号运算符

var i,j;
for(i = 0, j = 10;i<10;i++,j--){
  sum += i *j;
}复制代码

E.用for循环来遍历链表数据结构,并返回链表中的最后一个对象(也就是第一个不包含next属性的对象);

function tail(o){              //返回链表的最后一个节点对象
  for(;o.next;o = o.next){        //根据判断o.next是不是真值来执行遍历
    return o;
  }
}复制代码

(4).for/in

for(variable in object){
  statement
}复制代码

A.使用for循环来遍历数组元素

for(var i=0;i<a.length;i++){    //i代表了数组元素的索引
  console.log(a[i]);        //输出数组中的每个元素
}复制代码

B.for/in循环则是用来更方便地遍历对象属性成员

for(var p in o){    //将属性名字赋值给变量p
  console.log(o[p]);         //输出每一个属性的值
}复制代码

C.将所有对象属性复制至一个数组中

var o = {x:1,y:2,z:3};
var a = [],i=0;
for(a[i++] in o);复制代码

D.for/in循环可以像枚举对象属性一样枚举数组索引

for(i in a){
  console.log(i);
}复制代码
跳转
  • JavaScript的执行可以从一个位置跳转到另一个位置。

  • break语句是跳转到循环或者其他语句的结束。

  • continue语句是终止本次循环的执行并开始下一次循环的执行。

  • return语句让解释器跳出函数体的执行,并提供本次调用的返回值。

(1).标签语句

通过给语句定义标签,就可以在程序的任何地方通过标签名引用这条语句。

mainloop:while(token != null){
  //忽略这里的代码...
  continue mainloop;   //跳转到下一次循环
  //忽略这里的代码...
}复制代码

(2).break语句

单独使用break语句的作用是立即退出最内层的循环或switch语句。

for(var i = 0;i < a.length;i++){
  if(a[i] == target){
    break;
  }
}复制代码

(3).continue语句

它不是退出循环,而是转而执行下一次循环

for(var i = 0;i<a.length;i++){
  if(!data[i]){
    continue;   //不能处理undefined数据
  }
  total += data[i];
}复制代码

(4).return语句

函数调用是一种表达式,而所有表达式都有值。

函数中的return语句既是指定函数调用后的返回值。

return语句只能在函数体内出现,如果不是的话会报语法错误。当执行到return语句的时候,函数终止执行,并返回expression的值给调用程序。

function square(x){   //一个包含return语句的函数
  return x*x;      //调用结果为4
}
aquare(2);复制代码

(5).throw语句

所谓异常(exception)是当发生了某种异常情况或错误时产生的一个信号。

(6).try/catch/finally语句

其他语句类型

1.with语句

作用域链(scope chain),一个可以按序检索的对象列表,通过它可以进行变量名解析。

with语句用于临时扩展作用域链

不推荐使用

2.debugger语句

这条语句用来产生一个断点(breakpoint),JavaScript代码的执行会停止在断点的位置,这时可以使用调试器输出变量的值,检查调用栈等。

3.'use strict'

"use strict"是ECMAScript引入的一条指令。指令不是语句(但非常接近于语句)。

JavaScript语句小结

|版权声明:本文为summer博主原创文章,未经博主允许不得转载。

相关文章:

  • Parallels Desktop和VM里体验Ubuntu18.04LTS(2018.9重编版)
  • android压力测试命令monkey详解【转】
  • 机器学习学习笔记一
  • Laravel 菜鸟晋级之路
  • 事务概念
  • 设计模式学习总结(一)——设计原则与UML统一建模语言
  • python生成器
  • 日志分析logstash插件介绍
  • 几句话了解Zookeeper工作原理
  • linux中辅助的一些命令
  • 大数据技术ZooKeeper应用——解决分布式系统单点故障
  • Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件
  • 如何设计一个微型分布式架构?
  • [20171101]rman to destination.txt
  • java实现信息脱敏
  • [deviceone开发]-do_Webview的基本示例
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android系统模拟器绘制实现概述
  • Create React App 使用
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Vue 2.3、2.4 知识点小结
  • 测试开发系类之接口自动化测试
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 我有几个粽子,和一个故事
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 数论-逆元
  • (11)MATLAB PCA+SVM 人脸识别
  • (12)目标检测_SSD基于pytorch搭建代码
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (第一天)包装对象、作用域、创建对象
  • (转)Sql Server 保留几位小数的两种做法
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • ??eclipse的安装配置问题!??
  • @ComponentScan比较
  • @ConditionalOnProperty注解使用说明
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @RequestMapping处理请求异常
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [1204 寻找子串位置] 解题报告
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [C++]18:set和map的使用
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [IE编程] IE中对网页进行截图的编程接口
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [JS]JavaScript 注释 输入输出语句
  • [JS设计模式]Prototype Pattern
  • [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞