JS语法
JS 语法
JS 版本
历史版本
- ES3, IE 6 支持,总体评价: 垃圾
- ES5, 总体评价: 还是垃圾
- ES6, 大部分浏览器支持,总体评价:一半垃圾一半好
- ES2019 与 ES6 差别不大
为什么说 ES6 一半垃圾
- 因为 ES 不能删除以前的特性,要兼容旧网站
- 也就是说以前能运行的网站,以后都要能运行
- 对于 Python3 你就能知道兼容的好处: 稳定
JS 之父对 JS 的早期评价(ES6 前): 它的优秀之处并非原创,它的原创之处并不优秀。
取其精华,去其糟粕。是我们对待 JS 的态度。
表达式、语句、标识符
表达式与语句
表达式
- 1+2 表达式的值为 3
- add(1,2)表达式的值为函数的返回值
- console.log 表达式的值为函数本身
Q: console.log(3)表达式的值为多少?
A: 答案不是 3,而是 undifined,打印出来的东西才是 3.
语句
- var a = 1 是一个语句
二者的区别
- 表达式一般都有值,语句可能有也可能没有
- 语句一般会改变环境(声明、赋值)
- 上面两句话并不是绝对的
JS 是大小写敏感的。
标识符
规则
- 第一个字符,可以使 Unicode 字母或$或_或中文
变量名是标识符
- var _ = 1
- var $ = 2
好的注释
- 踩坑注解
- 为什么代码会写得这么奇怪,遇到什么 bug
顺序循环分支结构
if…else…语句
if() {
} else if(){
} else {
}
没有{}的话就只管到第一个语句
switch 语句
switch(fruit) {
case “banana”:
// …
break;
case “apple":
// …
break;
default:
// …
}
大部分时候,省略 break 你就完了
少部分时候,可以利用 break
三元表达式
A ? B : C;
&& 和 ||
console && console.log && console.log(’hi‘)
a = a || 100 // 保底值
while 语句
while() {}
for 语句
for(var i = 0; i < 5; i++) {
}
i === 5 // true
for(var i = 0; i < 5; i++) {
setTimeout(()=>{
console.log(i + 'random number’ + Math.random())
}, 0)
}
/*
5random number0.3423243
5random number0.5892132
…
5random number0.2343241
*/
for(let i = 0; i < 5; i++) {
setTimeout(()=>{
console.log(i)
}, 0)
}
/*
0
1
2
3
4
*/
}
break 和 continue
退出所有循环 V.S. 退出当前一次循环
for (var i = 0; i < 10; i++) {
if (i % 2 === 1) {
break;
}
}
console.log(i); // 1
for (var i = 0; i < 10; i++) {
if (i % 2 === 1) {
continue;
} else {
console.log(i);
}
}
/*
0
2
4
6
8
*/
break 会中断离他最近的一个 for:
for (var i = 0; i < 5; i++) {
for (var j = 101; j < 110; j++) {
if (i === 2) {
break;
}
}
console.log(i);
}
/*
0
1
2
3
4
*/
label 语句
语法
foo: {
console.log(1);
break foo;
console.log('本行不会输出’);
}
console.log(2);
面试
{
foo: 1;
}
Q: 上面的是什么?
A: foo 是一个 label,语句是个 1.
推荐的书籍:
推荐入门: 网道 JavaScript 教程
适合进阶: 你不知道的 JavaScript(上卷)