持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
算数运算符
第一种算数运算符: + - * / %
如果是两个字符串进行相加, 会进行拼串操作, 将两个字符串拼接为一个字符串
任何类型和字符串进行相加, 都会先转换为字符串, 然后再拼串
var a = 5, b = 3
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);
console.log("123" + "456"); // 123456
console.log(123 + "456"); // 123456
console.log("123" + 456); // 123456
第二种算数运算符: ++ --
++在后, 后+1, 也就是先返回当前的值, 然后再自增1
++在前, 先+1, 也就是先自增1, 然后再返回自增后的值
--在后, 后-1, 也就是先返回当前的值, 然后再自减1
--在前, 先-1, 也就是先自减1, 然后再返回自减后的值
console.log(a++); // 5
console.log(++a); // 7
console.log(a--); // 7
console.log(--a); // 5
第三种算数运算符: 单目+ 单目-
单目+可以将其它类型的数据转换为数值型数据
单目-可以将数值型数据符号取反
var c = true, d = null, e = undefined;
console.log(+c); // 1
console.log(+d); // 0
console.log(+e); // NaN
var f = 2, g = -4;
console.log(-f); // -2
console.log(-g); // 4
逻辑运算符
逻辑运算符有! && ||
逻辑运算的结果必然是一个布尔值, true或者false
!的作用是对一个布尔值取反, 我们可以利用!!来将其它的类型快速转换为布尔类型
&&当两个表达式的值都为true时, 才会返回true, 只要有一个为false, 就会返回false
||当左右两个表达式的值都为false时, 才会返回false, 只要有一个为true, 就会返回true
// 逻辑运算符! && ||
console.log(!true); // false
console.log(!false); // true
console.log(!!123); // true
console.log(!!"hello"); // true
console.log(!!null); // false
console.log(!!undefined); // false
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
// &&短路现象
// 当逻辑与的第一个表达式的值为false时, 则不再进行第二个表达式的计算与判断, 称为逻辑与的短路现象
false && console.log("&&我执行了吗?")
true && console.log("&&我执行了吧!")
// ||短路现象
// 当逻辑或的第一个表达式的值为true时, 则不再进行第二个表达式的计算与判断,称为逻辑或的短路现象
true || console.log("||我执行了吗?")
false || console.log("||我执行了吧!")
对于逻辑与&&, 当左右两边为非布尔型的值时, 如果左边的值为false, 则返回左边的值; 如果左边的值为true, 则返回右边的值
对于逻辑||, 当左边两边为非布尔型的值时, 如果左边的值为true, 则返回左边的值; 如果左边的值为false, 则返回右边的值
// &&的返回值的规则
console.log(1 && 2); // 2
console.log(0 && -2); // 0
// ||的返回值的规则
console.log(3 || 4); // 3
console.log(0 || null); // null
赋值运算符
赋值运算符有六个, 简单直接的赋值运算 = , 以及带算数运算符的赋值运算符
对于两个字符串的+=, 相当于拼串操作
let a = 5, b = 3; // 简单的赋值运算
console.log(a += b); // ==> a = a + 3 = 8
console.log(a -= b); // ==> a = a - 3 = 5
console.log(a *= b); // ==> a = a * 3 = 15
console.log(a /= b); // ==> a = a / 3 = 5
console.log(a %= b); // ==> a = a % 3 = 2
console.log('hi, ' + 'boy'); // 拼串操作
关系运算符
关系运算符的运算结果为布尔值, 如果关系成立则返回true, 如果关系不成立则返回false
如果左右两边的值都为字符串, 则是会逐位比较字符串中字符在unicode编码表中的位置
如果左右两边为非数值, 则是会转换为数值型再进行比较
let a = 5, b = 3;
console.log(a > b); // true
console.log(a < b); // false
console.log(a >= b); // true
console.log(a <= b); // false
console.log(true > false); // true
console.log('a' > 'b'); // false
console.log('21' > '3'); // false
相等运算符 不等运算符
== 如果左右两边的值相等则返回true, 不等则返回false
!= 如果左右两边的值不等则返回false, 相等则返回true
如果两边的类型不同, 则会将它们转换为相同的类型再进行比较
注意: NaN和任何值相比都是false
console.log(3 == 5); // false
console.log(5 == 5); // true
console.log(3 != 5); // true
console.log(5 == 5); // true
console.log(12 == '12'); // true
console.log('12' == '12'); // true
console.log(null == undefined); // true
console.log(null == NaN); // false
console.log(undefined == NaN); // false
恒等运算符 不恒等运算符
=== 如果左右两边的值数据类型相同, 并且值也相等则返回true, 否则返回false
!== 如果左右两边的值数据类型不同, 或者值不同, 则返回true, 否则返回false
console.log(12 === '12'); // false
console.log('12' === '12'); // true
console.log(null === undefined); // false
三元运算符
也叫条件运算符
条件语句 ? 表达式1 : 表达式2
如果条件语句为真则执行表达式1, 为假则执行表达式2
let a = 5, b = 3;
let max = a > b ? a : b;
console.log(max);
true ? console.log('这里是真') : console.log('这里是假');
false ? console.log('这里是真') : console.log('这里是假');
运算符的优先级
只需记住一个原则, 那就是我们可以使用()小括号让表达式变得容易阅读, 容易理解
if语句
if语句分为三种
一种只有条件判断, 满足条件则执行该语句, 否则不执行
一种是分支语句, 满足条件执行其中一条, 不满足执行另一条
一种是多个分支语句, 满足哪条判断, 就执行对应的那条语句
let a = 2, b = 3;
if (a > b) {
console.log('a的值大: ' + a);
}
if (a > b) {
console.log('a的值大: ' + a);
} else {
console.log('b的值大: ' + b);
}
let score = 40;
if (score > 100) {
console.log('分类不太正常啊');
} else if (score >= 90) {
console.log('小伙子非常优秀!');
} else if (score >= 80) {
console.log('小伙子考得还不错.');
} else if (score >= 60) {
console.log('还有很大的进度空间...');
} else {
console.log('奖励一份皮鞭炒肉!!!');
}
switch...case语句
将switch后面的值和每个case后面的值进行比较, 符合的话, 则执行当前case则对应的语句
如果所有的case都不符合, 则执行default语句
注意每个case后面的break是必须的, 否则就会出现执行多个case中语句的情况
// switch
// 判断春夏秋冬
let season = 2;
switch (season) {
case 1:
console.log('这是春季');
break;
case 2:
console.log('这是夏季');
break;
case 3:
console.log('这是秋季');
break;
case 4:
console.log('这是冬季');
break;
default:
console.log('什么季节都不是');
break;
}
let score = 1000;
switch (true) {
case score >= 90 && score <= 100:
console.log('很优秀!');
break;
case score >= 80:
console.log('继续努力!!');
break;
case score >= 60:
console.log('你还没有用尽全力!!!');
break;
default:
console.log('进步的空间很大哦!!!!');
break;
}
while循环
特点: 先对条件进行判断, 如果条件为真, 则执行循环体, 然后再进行条件判断, 直到为假
// while
let sum = 0;
let i = 1;
while(i <= 100) {
sum += i++;
}
console.log(sum); // 5050
dowhile循环
特点: 先执行循环体一次, 再对条件进行判断, 如果条件为真, 则执行循环体, 然后再进行条件判断, 直到为假
// do while
do {
console.log('do whiel');
} while (false);
for循环
特点: 将变量初始化, 条件判断和条件变化都放入到一个括号中, 让代码更简洁, 易读
// for
sum = 0;
for (let i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum); // 5050
break continue
break语句, 退出离它最近的循环, 结束整个循环
continue语句: 退出本次循环的执行, 也就是本次不再执行它后面的语句, 但不会结束整个循环
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (j == 5) {
// break; // 每到j==5的时候, 都会结束这个内层循环, 因此j一起是 0 到 4
continue; // 每到j==5的时候, 都会结束这个内层循环的本次执行, , 因此不会输出j - 5的语句
}
console.log('j - ' + j);
}
console.log('i --- ' + i);
}
label:statement
label相当于给循环添加一个标识, 那么当使用break与continue语句时, 就可以作用于指定的循环, 而不是作用于最近的循环
outer:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (j == 5) {
break outer; // 当j==5时, 我们直接结束outer所标识的循环, 也就是外层循环
// continue outer; // 当j==5的时候, 我们直接跳过outer所标识的循环, 也就是外层循环
}
console.log('j - ' + j);
}
console.log('i --- ' + i);
}