一、什么是表达式和语句
1.1 表达式
1+2 表达式的值为3
add(1, 2)表达式的值为函数的返回值
console.log 表达式的值为函数本身
console.log(3) 表达式的值为 undefined
1.2 语句
var a = 1 是一个语句
二者的区别:
表达式一般都有值,语句可能有也可能没有
语句一般会改变环境(声明、赋值)
上面两句话并不是绝对的
二、标识符
2.1 规则
- 第一个字符,可以是 Unicode 字母或 $ 或 _ 或中文
- 后面的字符,除了上面所说,还可以有数字
2.2 变量名是标识符
var _ = 1
var $ = 2
var ______ = 6
var 你好 = 'hi'
三、注释
3.1 用法
单行注释:ctrl + /
// 只能注释单行文本
多行注释:ctrl + shift + /
/*
多行注释
*/
3.2 分类
不好的注释
- 把代码翻译成中文
- 过时的注释
- 发泄不满的注释
好的注释
- 踩坑注解
- 为什么代码写的这么奇怪,遇到什么 BUG
好的注释能够提高代码阅读质量,注意信噪比
四、if else 语句
if (表达式) {
语句1...
} else {
语句2...
}
{} 在语句只有一句的时候可以省略,但是不建议这样做
五、while for 语句
while 循环
while (表达式) {
语句...
}
- 判断表达式的真假
- 当表达式为真,执行语句,执行完再判断表达式的真假
- 当表达式为假,执行后面的语句
for 循环
for 是 while 循环的语法糖(便捷写法)
for (语句1; 表达式2; 语句3) {
循环体
}
- 先执行语句1
- 然后判断表达式2
- 如果为真,执行循环体,然后执行语句3
- 如果为假,直接退出循环,执行后面的语句
六、break continue
6.1 break
我已经找到了一个满足条件的结果,不再继续往下执行,退出循环
// break:执行 break 立即跳出循环语句
for (var i = 1 ; i < 200 ; i += 2) {
// 能被 3 整除
if (i % 3 === 0) {
console.log(i);
break;
}
}
console.log("结束");
/*
i = 1;i < 200 真;i % 3 === 0 假;i += 2
i = 3;i < 200 真;i % 3 === 0 真输出 3;执行 break 立即跳出当前所在层的 for 语句
输出”结束“
*/
// 作用:在循环语句 for,do while,while 中遇见 break,只能结束 break 所在层的循环不能控制外层循环。
for (var i = 1; i <= 3 ; i ++ ) {
for (var j = 1; j <= 3; j ++) {
// 进行限制
if (j == 2) {
console.log(i,j);
// break 只能控制 j 不能控制 i
break;
}
}
}
console.log(j + "结束");
// break 控制外层循环:给外层循环添加标签,break 引用
waiceng: for (var i = 1; i <= 3 ; i ++ ) {
for (var j = 1; j <= 3; j ++) {
// 进行限制
if (j == 2) {
console.log(i,j);
// break 只能控制 i 不能控制 j
break waiceng;
}
}
}
console.log(i + "结束");
console.log(j + "结束");
/*
var i = 1;i <= 3 真;var j = 1;j <= 3 真;j == 2 假;j++
j = 2;j <= 3 真;j == 2 真;输出 1,2 执行 break waiceng; 跳出 i 循环
输出 1 结束
输出 2 结
*/
6.2 continue
continue(继续):这个结果不是我想要的,赶快测试下一个。
// continue 结束该次循环,立即执行变量改变
for (var i = 1; i < 10 ; i += 2) {
if (i % 3 === 0) {
continue;
}
console.log(i);
}
console.log(i + "结束");
/*
var i = 1;i < 10 真;执行 i = 1 这次循环 i % 3 === 0 假输出 1;
i = 3;i < 10 真;执行 i=3 这次循环 i % 3 === 0 真;执行 continue,
立即结束 i = 3 这次循环
i = 5;i < 10 真;执行 i = 5 这次循环 i % 3 === 0 假输出 5;
i = 7;i < 10 真;执行 i = 7 这次循环 i % 3 === 0 假输出 7;
i = 9;i < 10 真;执行 i = 9 这次循环 i % 3 === 0 真执行 continue;立即结束该次循环
i = 11;i < 10 假立即跳出 i 循环
输出 11 结束
*/
// continue:遇见 continue 结束该次循环,立即进入下一次循环
// continue 也是只能结束所在层的这次循环,不能控制外层循环
for (var i = 1; i <= 3; i++) {
for (var j = 1; j <= 3; j++) {
if (j == 2) {
// continue 只能控制 j
continue
}
console.log(i, j)
}
}
console.log(j)
/*
var i = 1;i <= 3 真;var j = 1;j <= 3 真;j == 2 假;输出 1, 1; j++
j = 2; j <= 3 真;j == 2 真遇见 continue 结束该次循环;j++
j = 3; j <= 3 真;j == 2 假;输出 1,3;j++
j = 4; j <= 3 假立即跳出 j 循环
i = 2; i <= 3 真;var j = 1;j <= 3 真;j == 2 假;输出 2, 1; j++
j = 2; j <= 3 真;j == 2 真遇见 continue 结束该次循环;j++
j = 3; j <= 3 真;j == 2 假;输出 2,3;j++
j = 4; j <= 3 假立即跳出 j 循环
i = 3; i <= 3 真;var j = 1;j <= 3 真;j == 2 假;输出 3, 1; j++
j = 2; j <= 3 真;j == 2 真遇见 continue 结束该次循环;j++
j = 3; j <= 3 真;j == 2 假;输出 2, 3; j++
j = 4; j <= 3 假立即跳出 j 循环
i = 4; i <= 3 假立即跳出 i 循环
输出 4
*/
// continue 想控制外层,也是通过标签绑定
waiceng: for (var i = 1; i <= 3; i++) {
for (var j = 1; j <= 3; j++) {
if (j == 2) {
// continue 只能控制 i
continue waiceng
}
console.log(i, j)
}
}
console.log(i)
七、label
语法
foo: {
console.log(1);
break foo;
console.log('本行不会输出')
}
console.log(2)
{
foo: 1;
}