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

JavaScript中的运算符与语句:深入理解编程的基础构建块

# JavaScript中的运算符与语句:深入理解编程的基础构建块

JavaScript编程的世界里,运算符和语句就像是构建大厦的基石,它们是编写高效、灵活代码的基础。今天,我们就来深入了解一下这些重要的元素。

## 一、运算符:代码的运算工具

### (一)赋值运算符

赋值运算符“=”用于将一个值赋给变量,例如`x = y`,就是把`y`的值赋给`x`。而复合赋值运算符则是将赋值与其他运算符结合,像`x += y`就等同于`x = x + y`,使用起来更加简洁高效。常见的复合赋值运算符有`+=``-=``*=``/=``%=` 等。

### (二)比较运算符

比较运算符用于比较两个操作数,并返回一个布尔值。其中,`===``!==`是严格比较,会同时检查值和类型;`==``!=`则在比较时会进行类型转换。例如,`5 === 5`返回`true`,而`5 == "5"`也返回`true`,因为`==`会把字符串`"5"`转换为数字5再进行比较。另外,大于(`>`)、大于等于(`>=`)、小于(`<`)、小于等于(`<=`)运算符用于比较数值大小。

### (三)算术运算符

算术运算符分为一元运算符(`-``+``--``++`)和二元运算符(`+``-``*``/``%` )。一元运算符如`++`可以让变量自增1`--`则让变量自减1;二元运算符执行常见的加、减、乘、除和取余运算,像`5 / 2`的结果是2.5`5 % 2`的结果是1

### (四)位运算符

位运算符在二进制层面上对数据进行操作。例如,按位与(`&`)会在两个操作数对应位都为1时才将结果位设为1;按位或(`|`)只要有一个对应位为1就设结果位为1;按位异或(`^`)在对应位不同时设结果位为1。还有按位非(`~`)、左移(`<<`)、算术右移(`>>`)和逻辑右移(`>>>`)等操作,在处理底层数据和优化算法时非常有用。

### (五)逻辑运算符

逻辑运算符用于处理布尔值。逻辑与(`&&`)只有当两个操作数都为`true`时才返回`true`;逻辑或(`||`)只要有一个操作数为`true`就返回`true`;逻辑非(`!`)则会反转操作数的布尔值,`!true`返回`false``!false`返回`true`

## 二、语句:代码执行的控制结构

### (一)If语句

If语句根据逻辑条件来决定执行哪部分代码。语法如下:

```javascript

if (condition1) {

  // 语句1

} else if (condition2) {

  // 语句2

} else {

  // else语句

}

```

条件表达式可以是任何类型,非布尔类型会进行隐式类型转换。例如:

```javascript

let s1 = 'Hello';

if (s1) {

  console.log(s1);

}

```

这里字符串`'Hello'`会被转换为`true`,所以会打印出`Hello`

### (二)Switch语句

Switch语句根据表达式的值来选择执行相应的代码块:

```javascript

switch (expression) {

  case label1:

    // 语句1

    break;

  case label2:

  case label3:

    // 语句23

    break;

  default:

    // 默认语句

}

```

如果表达式的值与某个`label`的值匹配,就执行对应的语句。`break`语句用于跳出`switch`,如果没有`break`,会继续执行下一个`label`的代码块。

### (三)条件表达式

条件表达式是一种简洁的三元运算符,语法为`condition? expression1 : expression2`。当`condition``true`时返回`expression1`,否则返回`expression2`。例如:

```javascript

let message = Math.random() > 0.5? 'Valid' : 'Failed';

```

这里根据随机数与0.5的比较结果来决定`message`的值。

### (四)循环语句

1. **For语句**:用于循环执行代码块,语法为`for ([init]; [condition]; [update]) { statements }`。例如:

```javascript

let sum = 0;

for (let i = 0; i < 10; i += 2) {

  sum += i;

}

```

这段代码会从0开始,每次加2,直到小于10,然后将这些数累加起来。

2. **For-of语句**:专门用于遍历数组或字符串,例如:

```javascript

for (let ch of 'a string object') {

  // process ch

}

```

它会依次取出字符串中的每个字符进行处理。

3. **While语句**:只要条件为`true`就会一直执行代码块,如:

```javascript

let n = 0;

let x = 0;

while (n < 3) {

  n++;

  x += n;

}

```

这里`n`会不断自增,直到不满足`n < 3`的条件。

4. **Do-while语句**:与`while`类似,但它会先执行一次代码块,再检查条件,例如:

```javascript

let i = 0;

do {

  i += 1;

} while (i < 10)

```

无论初始条件是否满足,`i`都会先自增1,然后再判断是否继续循环。

### (五)BreakContinue语句

1. **Break语句**:用于终止循环语句或`switch`。在循环中,当满足某个条件时,使用`break`可以跳出循环。例如:

```javascript

let x = 0;

while (true) {

  x++;

  if (x > 5) {

    break;

  }

}

```

如果`break`后带有标识符,还可以跳出指定的语句块。

2. **Continue语句**:用于停止当前循环迭代,直接进入下一次迭代。例如:

```javascript

let sum = 0;

for (let x = 0; x < 100; x++) {

  if (x % 2 == 0) {

    continue;

  }

  sum += x;

}

```

这里会跳过所有偶数,只累加奇数。

### (六)ThrowTry语句

1. **Throw语句**:用于抛出异常或错误,例如:

```javascript

throw new Error('this error')

```

2. **Try语句**:用于捕获和处理异常,语法为:

```javascript

try {

  // 可能发生异常的语句块

} catch (e) {

  // 异常处理

}

```

还可以结合`finally`语句,无论是否发生异常,`finally`中的代码都会执行。例如:

```javascript

function processData(s: string) {

  let error: Error | null = null;

  try {

    console.log('Data processed: ' + s);

  } catch (e) {

    error = e as Error;

  } finally {

    if (error != null) {

      console.log(`Error caught: input='${s}', message='${error.message}'`);

    }

  }

}

```

JavaScript中的运算符和语句是编程的核心部分,熟练掌握它们能让我们编写出更健壮、高效的代码。无论是处理复杂的逻辑判断,还是进行循环迭代,这些基础知识都起着至关重要的作用。希望通过今天的分享,大家能对它们有更深入的理解,在编程的道路上更进一步!

相关文章:

  • CentOS下,Xftp中文文件名乱码的处理方式
  • 【第42节】windows双机调试环境搭建和SEH原理剖析
  • RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法
  • 【科普】轨道交通信号系统相关名词解释
  • 基础贪心算法集合2(10题)
  • flutter-Text等组件出现双层黄色下划线的问题
  • android-根据java文件一键生成dex文件脚本
  • js | 网页上的 json 数据怎么保存到本地表格中?
  • NAS-相关软件推荐——非相册和备份的
  • 影刀RPA证书题库包含初级、中级、高级和AP初级
  • Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化
  • try...catch、async/await和Promise区别与联系
  • Openlayers:实现聚合
  • [LeetCode 55] 跳跃游戏
  • 【今日三题】经此一役小红所向无敌(模拟) / 连续子数组最大和(动态规划) / 非对称之美(贪心)
  • 在Ubuntu下进行单片机开发是否需要关闭Secure Boot
  • 扩展欧几里得算法:求解乘法逆元
  • 【MySQL数据库】InnoDB存储引擎:逻辑存储结构、内存架构、磁盘架构
  • 门极驱动器DRV8353M设计(三)
  • OpenCV中的轮廓检测方法详解
  • 人民日报开新栏,冼星海之女追忆父亲创作《黄河大合唱》
  • 继加州后,美国又有11州起诉特朗普政府滥用关税政策“违法”
  • 文旅部:今年一季度国内出游人次17.94亿,同比增长26.4%
  • 科普|结石疼痛背后的危机信号:疼痛消失≠警报解除
  • 秭归“橘颂”:屈原故里打造脐橙全产业链,创造12个亿元村,运输用上无人机
  • 网上销售假冒片仔癀和安宫牛黄丸,两人被判刑