开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
3.5 操作符
一元操作符
i++ / i--: 先执行,后加减 1;
--i / ++i:先加减 1,后执行;
位操作符
按位非操作符用波浪符(~)表示,它的作用是返回数值的一补数;
按位与操作符用和号(&)表示,有两个操作数:结果一假则假;
按位或操作符用管道符(|)表示,同样有两个操作数:结果一真则真;
按位异或用脱字符(^)表示,同样有两个操作数:结果同则假,异则真;
左移操作符用两个小于号(<<)表示,会按照指定的位数将数值的所有位向左移动:位数向前进相应位数;
有符号右移由两个大于号(>>)表示,会将数值的所有 32 位都向右移,同时保留符号(正或负)。 有符号右移实际上是左移的逆运算;
无符号右移用 3 个大于号表示(>>>),会将数值的所有 32 位都向右移。对于正数,无符号右移与有符号右移结果相同;对于负数是其绝对值的二补数;
布尔操作符
逻辑非操作符由一个叹号(!)表示,将操作数转换为布尔值,然后再对其取反。
逻辑与操作符由两个和号(&&)表示,应用到两个值:结果一假则假;
逻辑或操作符由两个管道符(||)表示,应用到两个值:结果一真则真;
乘法、除法和取模
乘法操作符由一个星号(*)表示,可以用于计算两个数值的乘积;
除法操作符由一个斜杠(/)表示,用于计算第一个操作数除以第二个操作数的商;
取模(余数)操作符由一个百分比符号(%)表示。
指数操作符
ECMAScript 7 新增了指数操作符,Math.pow()现在有了自己的操作符 **
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
console.log(Math.pow(16, 0.5); // 4
console.log(16** 0.5); // 4
// 不仅如此,指数操作符也有自己的指数赋值操作符**=,该操作符执行指数运算和结果的赋值操作:
let squared = 3;
squared **= 2;
console.log(squared); // 9
let sqrt = 16;
sqrt **= 0.5;
console.log(sqrt); // 4
加性操作符
加法操作符(+)用于求两个数的和;
减法操作符(-)用于求两个数的差;
关系操作符
关系操作符执行比较两个值的操作,包括小于(<)、大于(>)、小于等于(<=)和大于等于(>=)
但在比较 NaN 时,无论是小于还是大于等于,比较的结果都会返回 false。
相等操作符
等于操作符用两个等于号(==)表示,如果操作数相等,则会返回 true;
不等于操作符用叹号和等于号(!=)表示,如果两个操作数不相等,则会返回 true;
注意:null 和 undefined 相等;null 和 undefined 不能转换为其他类型的值再进行比较。NaN 不等于 NaN。
全等操作符由 3 个等于号(===)表示,只有两个操作数在不转换的前提下相等才返回 true;
不全等操作符用一个叹号和两个等于号(!==)表示,只有两个操作数在不转换的前提下不相等才返回 true。
注意: 因此推荐使用全等和不全等操作符。这样有助于在代码中保持数据类型的完整性。
条件操作符
// 又称三元运算符
condition ? expr1: expr2
// 约等于
if ( condition ) {
expr1;
} else {
expr2;
}
赋值操作符
乘后赋值(*=)、除后赋值(/=)、取模后赋值(%=)、加后赋值(+=)、减后赋值(-=)、左移后赋值(<<=)、右移后赋值(>>=)、无符号右移后赋值(>>>=)
注意: 这些操作符仅仅是简写语法,使用它们不会提升性能。
3.6 语句
if 语句
// 频繁语句
if (condition) statement1 else statement2
if (condition1) statement1 else if (condition2) statement2 else statement3
do-while 语句
do-while 语句是一种后测试循环语句,即循环体中的代码执行后才会对退出条件进行求值。换句 话说,循环体内的代码至少执行一次。
// do-while 的语法如下:
do {
statement
} while (expression);
let i = 0;
do {
i += 2;
} while (i < 10);
// 在这个例子中,只要 i 小于 10,循环就会重复执行。i 从 0 开始,每次循环递增 2
while 语句
while 语句是一种先测试循环语句,即先检测退出条件,再执行循环体内的代码。因此,while 循 环体内的代码有可能不会执行。
// while 循环的语法如下:
while(expression) statement
let i = 0;
while (i < 10) {
i += 2;
}
// 在这个例子中,变量 i 从 0 开始,每次循环递增 2。只要 i 小于 10,循环就会继续。
for语句
for 语句也是先测试语句,进入循环前要初始化代码,以及循环执行后要执行的表达式;
// for 循环的语法如下:
for (initialization; expression; post-loop-expression) statement
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
// 在这个例子中,变量 i 从 0 开始,递增变量 i。只要 i 不小于 10,循环就会继续。
for-in 语句 和 for-of 语句的区别:
for-in 语句是一种严格的迭代语句,用于枚举对象中的非符号键属性;for-in 语句不能保证返回对象属性的顺序。
// for in 语法如下:
for (property in expression) statement
for…of是作为 ES6 新增的遍历方式,是一种严格的迭代语句,允许遍历一个含有 iterator 接口的数据结构(数组、对象等)并且返回各项的值,普通的对象用 for..of 遍历是会报错的。
// for of 语法如下:
for (property of expression) statement
区别如下:
for…in获取的是对象的键名,for…of遍历获取的是对象的键值;for… in会遍历对象的整个原型链,性能非常差不推荐使用,而for…of只遍历当前对象不会遍历原型链;- 对于数组的遍历,
for…in会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for…of只返回数组的下标对应的属性值;
总结: for…in 循环主要是为了遍历对象而生,不适用于遍历数组;for…of 循环可以用来遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象。
区别的知识点根据其他人总结修改!!!不知道原作者是谁!
标签语句
标签语句用于给语句加标签,语法如下⬇️:
label: statement
break 和 continue 语句
break 语句用于立即退出循环,强制执行循环后的下一条语句;
continue 语句也用于立即退出循环,但会再次从循环顶部开始执行;
with语句
with 语句的用途是将代码作用域设置为特定的对象,语法如下⬇️:
with (expression) statement;
由于 with 语句影响性能且难于调试其中的代码,通常不推荐在产品代码中使用 with 语句。
switch语句
switch 语句是与 if 语句紧密相关的一种流控制语句,从其他语言借鉴而来。语法如下⬇️:
switch (expression) {
case value1:
statement
break;
case value2:
statement
break;
case value3:
statement
break;
case value4:
statement
break;
default:
statement
}
注意: 为避免不必要的条件判断,最好给每个条件后面都加上 break 语句。
注意: switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型
3.7 函数
注意: 第 10 章会更详细地介绍函数。
严格模式对函数也有一些限制:
- 函数不能以
eval或arguments作为名称; - 函数的参数不能叫
eval或arguments; - 两个命名参数不能拥有同一个名称。
如果违反上述规则,则会导致语法错误,代码也不会执行。