JS语法

JS 语法

参考资料: JavaScript 的基本语法 - JavaScript 教程 - 网道

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(上卷)

comments powered by Disqus