JS基本语法概述

175 阅读3分钟

表达式和语句

表达式

1+2表达式的为3
add(1,2)表达式的值为函数的返回值
console.log表达式的值为函数本身
console.log(3)表达式的值为多少?
如下图:

biaodashi.png

函数本身f log(){[native code]}.
console.log(3)打印3,值为undefined.

语句

let a = 1 是一个语句

二者的区别

表达式一般都有值,语句可能有也可能没有值。
语句一般会改变环境(声明、赋值)
而上述两句话并不是绝对的。


大小写区分

  • 不要混淆 var avar A 是不同的
    objectObject 是不同的
    functionFunction 是不同的
    具体含义学到数据类型再说

空格

  • 大部分空格没有实际意义 var a = 1var a=1 没有区别
    加回车大部分时候也不影响
    只有一个地方不能加回车,那就是return后面 如下图:

huiche.png

会自动在 return 后加上 undefined.
这是JS原创之处,并不优秀。

标识符

  • 规则 第一个字符,可以使Unicode字母或者$或_或中文。
    后面的字符,除了上述字符,还可以跟数字。

  • 变量名是标识符

var _ = 1
var $ = 2
var ______ = 6
var 你好 = 'hello'
  • 其他标识符用到可查MDN

注释

注释的分类

  • 不好的注释 把代码翻译为中文
    过时的注释
    发泄情绪的注释
  • 好的注释 踩坑的经验注释
    解释遇到bug的注释

区块block

  • 把代码包在一起
{
    let a = 1
    let b = 1
}
  • 常常与 if / for / while 一起使用

if语句

  • 语法 if(表达式){语句1}else{语句2}
    {}在语句只有一句的时候可以省略,但不建议省略

  • 变态情况 表达式里可以非常变态,如 a = 1
    语句1里可以非常变态,如嵌套的if else
    语句1里可以非常变态,如嵌套的if else
    缩进也可以变态,如面试题尝尝下套

a = 1
if(a === 2)
    console.log('a')
    console.log('a等于2')

mianshiti.png

变态省略,if语句只管到第一行,不满足条件不打印a.
第二行是if语句之外的语句,打印'a等于2',语句的值为undefined.所以运行结果如上图。

故使用最没有歧义的写法(程序员戒律)

最推荐使用的写法

if(表达式){
    语句
}else if(表达式){
    语句
}else{
    语句
}

次推荐使用的写法

function fn(){
    if(表达式){
        return 表达式
    }
    if(表达式){
        return 表达式
    }
    return 表达式
}

switch语句

  • 语法
switch(fruit){
    case "banana":
        // ...
        break;
    case "apple":
        // ...
        break;
    default:
        // ...
}
  • break 大部分时候,不能省略break.
    少部分时候,可以利用break. 如下图运算:

break.png


问号冒号表达式

  • 表达式1?表达式2:表达式3 当if语句只有一个语句,else语句也只有一个语句的时候,代替if/else语句达到简化使用的目的。

wenhaomaohao.png


&&短路逻辑

  • A && B && C && D取第一个假值AD,并不会取true/false

&&.png

||短路逻辑

  • A|| B || C || D 取第一个真值AD,并不会取true/false 原理和上图相似。

while循环

  • 语法 while(表达式){语句}
    判断表达式的真假
    当表达式为真,执行语句,执行完再判断表达式的真假
    当表达式为假,执行后面的语句
  • 其他 do...while用的不对,可自行查看文档了解

for循环

  • 语法糖 for是while循环的方便写法
    方便在哪?
  • 语法
for(语句1;表达式2;语句3){
    循环体
}

先执行语句1(只执行1次)
然后判断表达式2
如果为真,执行循环体,然后执行语句3,再判断表达式2
如果为假,直接退出循环,执行后面的语句。

breakcontinue

  • 退出当前{}所有循环 V.S.退出当前一次循环

label语句

用的很少,常用于面试题

  • 语法
foo:{
    console.log(1);
    break foo;
    console.log('本行不会输出');
}
console.log(2);

label.png

  • 面试题
{
    foo: 1;
}

label1.png
是个代码块,有个foo标签,内容是1。而不是对象。


推荐书籍

阮一峰的免费教程:入门篇
你不知道的JavaScript