JS的基本语法

134 阅读3分钟

不要盲目学习JS 要取其精华去其糟粕!

一、表达式与语句

表达式

  • 1+2表达式的值为3
  • add(1,2)表达式的值为函数的返回值
  • console.log表达式的值为函数本身
  • console.log(3)表达式的值为多少? 【只有函数才有返回值】

语句

var a=1 是一个声明语句

二者的区别

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

【注意】

  • var a和var A是不同的
  • Object和Object是不同的
  • function和Function是不同的

大部分空格没有实际意义 (不影响断句就没问题)

  • var a = 1和var      a=1没有区别
  • 加回车大部分时候也不影响
  • 只有一个地方不能加回车,那就是return后面

二、标识符

规则

  • 第一个字符,可以是Unicode字母或$或_或中文
  • 后面的字符,除了上面所说,还可以有数字
  • 但数字不能作为开头

变量名是标识符

  • var
  • var $=2
  • var _____=6 (可以但没必要)
  • var 你好='hi'(中文不影响)

注释

  • 写为什么写这段代码,是为了解决什么bug就好
  • 不要把代码做成中英翻译 = =!

区块block

把代码包在一起 常与if / for / while合用

三、if else 语句

if 语句

语法

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

{}在语句只有一句的时候可以省略,但不建议

变态情况

表达式里如a=1(a = 1与a === 1不同)

缩进也可以很变态,如面试题常常下套

a = 1

if(a === 2)

console.log('a')

console.log('a等于2')

==>a等于2

解析:无{花括号}时,只管第一个语句,即时是同一行的分号隔开;但逗号可以,因为逗号隔开算一个语句

所以,一定要使用最没有歧义的写法

最推荐使用的写法

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

次推荐使用的写法

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

switch 语句

语法

switch (fruit) {
case "banana":
break;
case "apple"
break;
default:
}

break

  • 大部分时候,break不可省略
  • 少部分时候,可以利用break

问号冒号表达式

表达式1?表达式2:表达式3

例: return a>b ? a : b

如果a>b则返回a;否则返回b

&& 短路逻辑

例1: A && B

A为真则取B;

A为假则取A;

不会取true/false.

例2: A && B && C && D

取第一个假值或D

【A为假,后面就不看了,直接取A;A为真,则取第一个假值;都不是假的就取D】

|| 短路逻辑

例3: A || B

A为真则取A;

A为假则取B;

不会取true/false.

例4: A || B || C || D

取第一个真值或D 【A为真,后面就不看了,直接取A;A为假,则取第一个真值;都不是真的就取D】

例5: A = A || B

【B为保底值,该语句为:如果A不存在则A取B的值;存在则不变】

四、while for 语句

while语句

语法

**while(表达式){语句} **

  • 判断表达式的真假
  • 当表达式为真,执行语句,执行完再判断表达式的真假
  • 当表达式为假,执行后面的语句
  • do...while用得不多

BUG

解析
while (a != 1) { console.log(a) a = a + 0.1 }浮点数的问题导致+0.1并不精确;使得a永远≠1,出现死循环

image.png

for 语句

for是while循环的方便写法

语法

for(语句1;表达式2;语句3){ 循环体 }

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

【注:】

letvar
for(let i = 0; i < 5; i++){ setTimeout(()=>{console.log(i)}) }for(var i = 0; i < 5; i++){ setTimeout(()=>{console.log(i)}) }
=>01234=>55555

image.png

五、break & continue

退出所有循环和退出当前一次循环

break只会跳出离他所在的最近循环

例:

image.pngimage.png

label

语法

foo:{ 
    console.log1); 
    break foo; 
    console.log('本行不会输出'); 
} 
console.log2);

下面这是什么意思?

{ 
    foo:1; 
}

解析: foo是个label,语句是1(如果没有分号Chrome做了改变,{foo:1}是对象)