JS的基本语法

236 阅读4分钟

标识符

标识符是在应用程序中,变量取名字时候用到的符号名。变量名就是标识符。

标识符需要遵循的规则:

  • 必须以Unicode字母、符号“_”或者符号“$”开头
  • 之后的字符可以出现数字
  • 需要注意JavaScript是要区分字母大小写的

表达式和语句

定义

表达式

表达式是一组代码的集合,它返回一个值。一般来说,表达式都伴随值或返回值的存在。但这并非绝对的

例如:1+2的表达式的值是3;

add(1,2)表达式的值为函数的返回值(值和返回值不一样,只有函数有返回值);

console.log表达式的值为函数本身;

console.log(3)表达式的值为undefined(函数的表达式的值是返回值,log的返回值是undefined)

语句

语句被称作是流控制语句,通常有标志性的一个或者多个关键字,例如:if 、 while、break、continue、switch等。语句一般会改变环境(声明/赋值)

if语句

if else 语句(如果.....那么.....)

语法

if(表达式){语句1} else{语句2} --意思是:如果表达式成立,那么语句1执行;反之语句2执行

例:

a = 2
if(a = 1){
console.log('假的')
}else{
console.log('真的')
}

变态情况

  • a = 1(一个等于号的意思是赋值,三个等于号才是等于的意思)
  • 语句1里可以非常变态,如:嵌套的if else;语句2和语句1同理
  • 缩进也可以很变态,如
if(a ===2)
console.log('a')
console.log('addd') 

这时JS会返回addd,因为if语句默认下一句是带{}的,而再下一句则默认是新的内容,与之前无关

switch 语句(if.....else升级版)

语法

switch (fruit) {
case "bunana":
console.log('banana')
break;
case "apple":
 console.log('apple')
break;
default:
console.log('啥也没有')
}

意思是:()里边是主要内容;如果选择banana,会打印banana;如果选apple会打印apple;如果以上两个都没选,会打印“啥也没有”

注意的坑

在绝大部分时候,必须写break,如果不写,则执行完上面内容后还会继续执行下一个任务,而不是出结果

问号冒号表达式(表达式1?表达式2:表达式3)

这种表达式可以理解为简化版的if语句,在没有必要写if语句的情况下,推荐使用

语法

相同内容,用if语句这样写

function max(a,b){
if(a>b)return a;
else return b;
}

用问号冒号表达式这样写

function max(a,b){
return a>b ? a : b
}

&&短路逻辑

这个语句也是用来代替if...else语句的

语法

相同内容,用if语句这样写

if(Window.f1){
console.log('存在')
}

用&&短路逻辑这样写

Window.f1 && console.log('存在')

&&短路逻辑值的特点

  • 如果前面为真值,那么就会去求后面的值
  • &&值的关系图:如果A为假,则值为A,如果A为真,则值为B

||短路逻辑

用法同&&短路逻辑相反,如果a不是真,则执行b

while、for循环语句

while循环语句

while 循环与 for 循环的功能基本一样,但是while 比较容易出错,所以常用语句还是推荐 for

语法

  • while(表达式) {语句}

意思是:如果表达式为真,执行这个语句,执行完再次判断表达式的真假。如果表达式为假,执行这句后面的语句(如果后面没有语句则跳出循环)

例:

var i = 0;
while( i < 10 ){
	console.log(i);
	i++;
}

注意!

因为 while 的循环需要初始化、判断、循环体、增长四个要素全部正确且合理,否则非常容易进入死循环。

例:

var a=0.1                     
while(!a==1){              
    console.log(a)         
    a=+0.1              
    }
}

以上代码因为因为浮点数不精确的原因陷入死循环

for 循环

可以看做是while循环的高效写法

语法

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

意思是:语句1用来初始化,表达式2是用来进行判断的,语句3用来增长。首先执行语句1,之后进行表达式2的判断,如果成立则执行循环体,执行完成后再执行语句3,依次往复

例:

for(var a = 1;a<5;a++){   
        console.log(a)
} 

特例

setTimeout的执行机制会导致输出值发生变化。

因为setTimeout函数的执行机制是是在一定时间后执行func函数,而浏览器会按照顺序执行函数,遇到setTimeout会将func函数放到执行队列中,等到主要函数执行完成后,才开始从执行队列中按照先后顺序取出来func并执行。

例(正常情况):

for(var a = 1;a<5;a++){   
        console.log(a)
} // 返回值为 0 1 2 3 4

加入setTimeout后:

for(var a = 1;a<5;a++){
    setTimeout(()=>{        
        console.log(a)
    },0) 
} // 返回值为5 5 5 5 5

想要规避这种情况只需要将var替换成let即可(具体原因不清楚,感兴趣的伙伴可以查查)

例:

for(let a = 1;a<5;a++){
    setTimeout(()=>{        
        console.log(a)
    },0)
} // 返回值为 0 1 2 3 4

break和continue

brank

  • 退出当前所有循环(当循环嵌套的时候,跳出离break最近的那个循环)

continue

  • 退出当前一次循环(如果条件符合,会继续进行下次循环)

lable语句

lable语句可以理解为代码块,相对来说使用范围较小,我们一般情况下很少用到

例:

foo: {
    cosole.log(1);
    break foo;
    console.log('这一行无视掉');
}
console.log(2)
//返回值为1 2

需要注意

lable语句里面内容不一定是一个对象,有可能是一个标签

var a = {
    foo:1;
}//返回值为1