JavaScript语法与语句

121 阅读5分钟

JS语法和版本介绍

推荐书籍

  1. 阮一峰的免费课程

  2. 你不知道的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 是一个语句

两者区别

  1. 表达式一般都有值,语句可能有,也可能没有

  2. 语句一般会改变环境(声明,赋值)var a = 1 a 就是环境

  3. 上面两句话并不是绝对的

语法注意的地方

1. 大小写敏感

  • var avar A 是不同的

  • objectObject 是不同的

  • functionFunction 是不同的

  • 具体含义后面学到的时候再补充

2. 空格和回车

大部分时候空格和回车没有实际意义

  • var a = 1var 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. && 短路逻辑

aab0c987d8d5dee2280e6366021f118.png

 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