JS语法和版本介绍
推荐书籍
-
你不知道的javascript(上)
JS版本
-
ES3,IE6支持,总体评价:很一般
-
ES5,总体评价还是很一般
-
ES6,大部分浏览器都支持,总体评价:比之前版本都好,但是还是有地方不好。
ES6 为啥有地方还是不好
-
因为ES不能删除以前的特性,要兼容就网站
-
也就是说以前运行的网站,以后都要继续运行
-
对比python3,兼容的好处在于:稳定
为啥有这么多不好还需要学习它
-
首要的是它能让我们找到工作,能给公司创造价值
-
因为它门槛低,容易上手
-
但是作为程序员,永远不要只学一门编程语言,会让你的视野太狭隘
JS之父——布兰登的评价
- 它的优秀指出并非原创,它的原创之处并不优秀
JS语法
表达式
-
1 + 2表达式的值为 3 -
add(1,2)表达式的值为函数的返回值(只有函数有返回值,返回值就叫函数的值) -
console.log表达式的值为函数本身 -
console.log(3)表达式的值为 undefined
语句
-
var a = 1是一个语句 -
let b = 2是一个语句
两者区别
-
表达式一般都有值,语句可能有,也可能没有
-
语句一般会改变环境(声明,赋值)
var a = 1a 就是环境 -
上面两句话并不是绝对的
语法注意的地方
1. 大小写敏感
-
var a和var A是不同的 -
object和Object是不同的 -
function和Function是不同的 -
具体含义后面学到的时候再补充
2. 空格和回车
大部分时候空格和回车没有实际意义
-
var a = 1和var a=1没有实际区别 -
加回车大部分时候也不影响
-
只有
return的后面不能加回车,如果加回车那返回的就是undefined -
空格只有不影响断句就行
标识符
1. 规则
-
第一个字符,可以是unicode字母或者是 $ 或者是 _ 或者是 中文 也行
-
后面的字符,除了上面所说,还可以是数字,但第一个字符绝对不能是数字
2. 变量名是标识符
-
var _ = 1是可以的 -
var $ = 2是可以的 -
var _____ = 6是可以的 注意:下划线命名不要超过两个,不然你会被你的同事打死 -
var 你好 = 'hi'是可以的
3. 命名错误
- syntaxError: 一般这个报错就代表语法有问题
注释
-
//这样能注释一行 -
/* */这样能注释很多行 -
明确写代码一定要多写注释这个理念是错的
1. 不好的注释
-
把代码翻译成中文
-
过时的注释(一般结合第一条会发生的)
-
发泄不满的注释(代表职业素质不高)
2. 好的注释
-
踩坑注解(比如哪个地方踩了坑可以详细的给下一位看到代码的人可以看到)
-
为什么代码写得这么奇怪,遇到什么BUG写一下注释
block 区块
- 把代码包在一起
{
let a = 1;
let b = 2;
}
通常由与 if/for/while 合用
JS条件语句
if语句
1、语法
if(表达式){
语句1
} else {
语句2
}
- {} 在语句只有一句话的时候可以省略,但是不建议这么做,容易产生歧义
2.变态的地方
-
表达式里可以非常变态,如
a = 1 -
语句1里也可以非常变态,如嵌套的if else
-
语句2里也可以非常变态,如嵌套的if lese
-
缩进也可以很变态,如面试题里常常给你下套
a = 1
if (a === 2)
console.log('a')
console.log('a等于2')
// 结果是('a等于2')
因为if没有写{}默认只包住离它最近的一个语句
推荐写法
- 最推荐的写法
if(表达式){
语句
}else if(表达式){
语句
}else {
语句
}
- 次推荐的写法
function fn(){
if(表达式){
return 表达式
}
if(表达式){
return 表达式
}
return 表达式
}
switch 语句
- if...else...升级版
1.语法
switch(){
case "banana":
// ...
break ;
case "apple":
// ...
break ;
default:
// ...
}
2.break
-
大部分时候,如果你要写switch并省略了break,那么你的代码会出大问题
-
少部分时候,可以利用break做别的事情
问号冒号表达式 (三元表达式)
1.语法
表达式1 ? 表达式2 : 表达式3
if(a>b){
return a
}else {
return b
}
简化一点就变成三元表达式
a>b? a : b
短路逻辑
1. && 短路逻辑
A && B && C && D
取第一个假值,或D
- 并不会取 true/false
- fn&&fn()
2. || 短路逻辑
A || B || C || D
取第一个真值或D
- 并不会取true/false
- 常用于保底值 A=A||B
while 循环
1.语法
-
while (表达式){语句} -
判断表达式的真假
-
当表达式为真时,执行语句,执行完再次判断表达式的真假
-
当表达式为假,跳出循环执行后面语句
2. do...while
- 用得机会比较少,需要时查询MDN文档
for 循环
1.语法糖
-
for是while循环的方便写法
-
方便在什么地方
2.语法
for(语句1;表达式2;语句3){
循环体
}
-
先执行语句1
-
判断表达式2
-
如果为真,执行循环体,然后执行语句3
-
如果为假,直接退出循环,执行后面的语句
3.注意
-
var和let在for循环内的作用不同
-
while循环某个环节出错很容易死循环,而for循环让你能更直观看见设置的参数
break和continue
-
break:退出所有循环
-
continue:退出当前一次循环
label 语句
- 只是一个语句,不是对象,需要区分清楚
语法
foo: {
console.log(1);
break foo;
console.log('本行不会输出')
}
// 最终输出只有1