1 js 版本
1.1 历史版本
- ES3
- ES5
- ES6 ECMAScript 的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为 ECMAScript 6 或者 ES6。自此,ECMAScript 每年发布一次新标准。
1.2 特性
- ES不能删除以前的特性,要兼容旧网站
1.3 语言价值
- 是由其产生的价值决定
- js是世界上使用最广的语言
- js是门槛极低的语言
- js是一门能产生价值的语言
2 js 语法
2.1 表达式
- 1+2 表达式的值为3
- add(1,2)表达式的值为函数的返回值
- console.log()表达式的值为函数本身
- console.log(3)表达式的值为多少? undefind
2.2 语句
- var a = 1是一个语句
2.3 语句和表达式的区别
- 表达式一般都有值,语句可能有也可能没有
- 语句一般会改变环境(声明、赋值)
- 以上不是绝对的
2.4 大小写敏感
- var a 和 var A 是不同的
- object和Object是不同的
- function和Funtion是不同的
2.5 空格和回车
- 大部分都是没有意义的
- var a = 1和 var a = 1没有区别
- 回车大部分时候也不影响
return后面不能加回车
function f(){
return 3;
}
// 3
function f(){
return
3
}
//undefined
2.6 标识符
- 第一个字符可以是Unicode字母或者$、_或者中文
- 非第一个字符除了以上字符还包括数字
- 变量名是标识符
var _ = 1
var $ = 2
var ____ = 6
var 你好 = 'hi'
2.7 注释
// 这是注释
/**
* 这是多行注释
*/
建议不要写无用注释
好的注释
- 踩坑注释
- 为什么代码写得这么奇怪,遇到什么bug
2.8 区块
- 把代码包在一起
{
let a = 1;
let b = 2;
}
- 常与if/for/while等合用
2.9 if语句
语法
if(表达式){语句1} else{语句2}
{}语句里面只有一句得时候可以省略,不建议
其他情况
- 表达式书写, 如 a = 2
a = 1
if(a = 2){
console.log('a是2')
} else {
console.log('a是1')
}
- 缩进
a = 1
if(a === 2)
console.log('a');
console.log('a1');
// 输出 a1
a = 1
if(a === 2)
console.log('a'),
console.log('a1')
// 无输出
推荐写法
if(表达式){
语句
} else if(表达式){
语句
} else {
语句
}
2.10 switch
1 语法
switch(fruit){
case "banana":
// do something
break;
case "apple":
// do something
break;
default:
// do something
}
2 break
- 大部分时候,不能省略break;
- 少部分时候,可以利用break;
3 判断
进行判断时与===类似,与==不同
let a = 1;
switch (a){
case 1:
case 3:
console.log("单数");
break;
case 2:
case 4:
console.log("偶数");
break;
}
2.11 三元表达式
a > 0 ? judge = true : judge = false
2.12 &&
window.f1 && console.log("f1存在")
2.13 ||
取第一个真值
a = a || 100
2.14 while
1 语法
- while(表达式){语句}
- 判断表达式的真假
- 当表达式为真,执行语句,执行完再判断表达式的真假
- 当表达式为假,执行后面的语句
let i = 0;
while(i < 10){
console.log(i);
i = i + 1;
}
// 浮点数不精确,导致死循环
let a = 0.1;
while(a !== 1){
console.log(a);
a = a + 0.1;
}
2 其他
- do while
2.15 for
1 语法糖
- for是while循环的方便写法
2 语法
for(语句1; 表达式2; 语句3){
循环体
}
- 先执行语句一
- 然后判断表达式2
- 如果为真,执行循环体,然后执行语句3
- 如果为假,直接退出循环,执行后面的语句
for(let i = 0; i < 5; i++){
console.log(i)
}
for(var i = 0; i < 5; i++){
setTimeout(
() => {
console.log(i)
}
,0)
}
2.16 break contiune
for(let i = 0; i < 10; i++){
if(i === 2){
continue;
}
if(i === 5){
break;
}
console.log(i)
}
2.17 label
1 语法
foo:{
console.log(1);
break foo;
console.log("本行不会输出");
}
console.log(2)
2 坑
{
foo: 1
}
上面是什么