1. 表达式和语句
表达式一般都有值,语句可能有值也可能没有,语句一般会改变环境(声明、赋值),但这些都不是绝对的。
- 1 + 2 表达式值为 3
- console.log 表达式的值为函数本身
- add(1, 2) 表达式的值为函数的返回值
- console.log(3) 表达式的值为
undefined,打印3 - var a = 1 是一个语句,值为
undefined
2. 标识符的规则
- 第一个字符可以是 Unicode字母、$、下划线(_)或中文
- 后面的字符,除了上述字符,还可以有数字
- 变量名是标识符
- JavaScript 大小写敏感
3. 注释
- 好的注释:告诉你为什么要这样写
- 烂的注释:告诉你写了什么
4. if else 语句
// 打印结果是什么?
var a = 1;
if(a === 2)
console.log(a);
console.log('a等于2');
// 结果打印 a等于2,因为 if 语句省略花括号时,只有一句
// 打印结果是什么?
var a = 1;
if(a === 2)
console.log(a), console.log('a等于2');
// 结果什么也不打印,因为逗号表示语句未结束
// 前端常用 && 和 || 代替 if 语句
a = a || 100;
// 等同于以下语句
if(a) {
a = a;
} else {
a = 100; // 保底值
}
window.f1 && console.log('不存在');
false && 3 || true && 4;
/* 结果为4。
(1) 因为与、或、非运算优先级 ! > && >|| ,所以先执行两边的 && 运算,最后执行 || 运算。
(2) && 运算,左边表达式判断是 false,则返回左边表达式的值,否则返回右边表达式的值。
false && 3 结果为 false。true && 4结果为4。
(3) || 运算,左边表达式判断是 true,则返回左边表达式的值,否则返回右边表达式的值。*/
5. while / for 语句
- for 循环:可以在很明确循环次数上去做内容
- while 循环:不明确循环次数,也可以做。场景:如猜数字
- do…while:至少会执行一次
// 是否会死循环?
var a = 0.1;
while(a != 1) {
console.log(a);
a = a + 0.1;
}
// 会死循环。因为浮点数相加过程中逐渐不精确,无法到达1
// 执行完语句后 i 为多少?
for(var i = 0; i < 5; i++) {
console.log(i);
}
// i = 5
// 打印结果是什么?
for(var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0)
}
// 打印 5 次 5。
// for 循环先执行,每次执行把定时器放到事件队列里。
// 主线程 for 循环执行完了,才会执行事件队列里的。
// 希望 5次按顺序打出数字,将 var 改为 let 即可。
// 几秒打出几?
for(var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000*i)
}
// 0 秒输出一次 3,1 秒输出一次3, 2 秒输出一次 3。
6. break / continue
break 和 continue 跳出最接近的循环,对循环外的循环没有影响。
7. label 语句
语法如下
foo: {
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2);
// 打印结果 1 和 2
// 以下是什么?
{
foo: 1;
}
// 是 label,值为1
// 以下是什么?
var a = {
foo: 1
}
// 是对象