1. 写在前面

随着JS版本的不断升级,原有标准不断改变,很多旧的语法都被淘汰,新的语法不断补充。但JS有一个好处是高版本标准是始终兼容旧版本的,旧的语法只是如今不再使用,但以前的语法还是起作用的。看到我前面介绍的JS发展历史可知,JS是在2015年ES6标准发布后开始了新的发展,也是在ES6版本之后JS开始正式步入正轨,之后每年都跟新的版本也是在ES6版本的基础上变化的,差别不大,因此这里介绍的JS知识是基于ES6标准的基础知识,适用于最新的大多数浏览器,也会注明哪些是新的知识。

2. 表达式、语句、变量与标识符

表达式

表达式是一个为了得到某个值的计算式,类似于我们做数学题时等号左边的式子,但JS中的表达式的含义有所延伸,如下几种形式都是表达式,表达式一般都有值

  1. 计算式 3 + 5,值为8
  2. 函数add(3,5)也是表达式,也有值其值叫做返回值。
  3. console.log也是一个表达式,其值是log函数本身。
  4. console.log(3)和add(1,2)一样是函数的调用的函数表达式,其值为函数返回值,该函数没有返回值,为undefine。

语句

语句是执行某种操作的描述,可用于改变环境,一般没有返回值,语句以分号结束,一个语句加一个分号表示该语句的结束。但在JS脚本语言中,JS程序的执行单位是行,因此在这一行没有分号的情况下,一行就是一个语句。由此可知,JS脚本编写时,有的程序员写语句不写分号,有的写分号,是都可以的,看个人习惯。不写分号按照一行一个语句执行,写了分号按照分号执行语句。

变量

变量就是为值取名,引用这个名字就是使用这个值,变量和值在内存中的存储位置也不一样,变量是在变量区,值是在栈区或堆区。且JS的变量名区分大小写,var a 和 var A 是两个不同的变量,Object和object也是两个不同的东西。

标识符

标识符是用来识别不同值的合法命名,最常见的标识符是变量名。标识符的定义是要遵循一定的规则的,具体如下:

  1. 首字母必须是、Unicode字母、$美元符号、_下划线、中文
  2. 第二个及其以后的字母是除了以上以外可以是数字
  3. 中文是合法的标识符

总结JS语法注意点

  1. 语句是否必须加分号

    JS是按行执行,若一行只有一个语句可以不加分号,默认这一行是一个语句,根据编程习惯自己选择。

  2. 大小写敏感

    JS标识符区分大小写,var A 和 var a是两个不同的变量

  3. 空格的作用

    空格没有实际意义,加再多空格也不影响语句。加回车也不影响语句。

在return语句的后面不能加回车,return这一行会被执行,然后直接返回了,不会执行回车换行后面的了

3. 条件语句

条件语句是用于判断,如果满足什么情况,就执行什么操作。JS提供了两种条件判断语句,分别是if语句和switch语句,具体用法如下:

if语句

单if语句结构为:

  1. if(表达式){
  2. 语句1
  3. }//如果满足表达式,就执行语句1

当{ 代码块 }中的语句是只有一句时,是可以省略花括号{ }的,如下:

  1. if(表达式)
  2. 语句1
  3. 语句2 //该语句不属于if条件成立的代码中,因为没有花括号{}就只是包含一行一个语句。只是缩进有问题,
  4. 使其看起来像,这是一个坑也是一个考点。因此不管几个语句,最好使用{}括起来

if else语句结构为:

  1. if(表达式){
  2. 满足条件执行的语句1
  3. }
  4. else{
  5. 不满足条件执行的语句2
  6. }

并且if和else中的语句还可以再嵌套if、else语句,例如在else语句中嵌套if、else语句如下:

  1. if(表达式1){
  2. 语句1
  3. }
  4. else{
  5. if(表达式2){
  6. 语句2
  7. }
  8. else{
  9. 语句3
  10. }
  11. }

以上则又引申简写为另外一种形式如下,即成了if 、else if、else语句。但其实这种语句并不存在,是在else语句中嵌套if else语句的简写。

  1. if(表达式1){
  2. 语句1
  3. }
  4. else if(表达式2){
  5. 语句2
  6. }
  7. else{
  8. 语句3
  9. }

以上的if、else if、else语句也可用单if语句组合实现,如下所示:

  1. function fn(){
  2. if(表达式1){
  3. 语句1
  4. return
  5. }
  6. if(表达式2){
  7. 语句2
  8. return
  9. }
  10. if(表达式3){
  11. 语句3
  12. return
  13. }
  14. }

switch语句

当有多种情况可供选择时,使用if语句太麻烦,可使用switch选择语句,具体语法如下:

  1. switch(变量或表达式){
  2. case 1或表达式1:
  3. 语句1;
  4. break;
  5. case 2或表达式2:
  6. 语句2;
  7. break;
  8. case 3或表达式3:
  9. 语句3;
  10. break;
  11. default:
  12. 语句4; //是除上述情况外的其他剩余情况值
  13. }

进入switch语句后的变量值或表达式和值1或表达式1的判断是用严格等于(===)判断的,即严格相等运算符,即意味着比较时不会进行类型转换,如1和true是不等的。若是表达式,则用其表达式的运算结果比较,不比较运算过程,如 1+3 和 2+2 是相等的表达式。

注意:

每个case选择情况执行完后要加break,加了break则意味着当前选择已结束,不再往后选择。若不加break,则会继续往后执行语句,直到遇到break语句或结束位置。这样设计break的原因其实是为了方便多种情况对应一个结果的写法,如下所示:

  1. switch(变量或表达式){
  2. case 1或表达式1:
  3. case 2或表达式2:
  4. 语句1;
  5. break; //以上1、2两种情况下都会执行语句1
  6. case 3或表达式3:
  7. case 4或表达式4:
  8. 语句2;
  9. break;//以上3、4两种情况下都会执行语句2
  10. default:
  11. 语句3;
  12. }

4. 循环语句

循环语句是用于当满足某一条件时,就一直执行某一操作的情况。JS提供了三种循环语句,分别是while循环、do while循环和for循环,具体语法结构如下:

while循环

  1. while(条件){
  2. 循环体语句
  3. }

以上结构的意思是当条件为真时,执行循环体语句,然后再判断条件是否为真,再执行,一直循环下去,直至条件为假或遇到break退出循环。

do while循环

  1. do{
  2. 循环体
  3. }while(条件); //后面的分号不能少

以上结构和while循环类似,唯一不同是,do while是先执行一次循环体再判断条件是否为真,若为真,再执行循环体,依次类推循环。也就是说,不管条件是否为真,循环体都至少执行1次。

for循环

  1. for(初始表达式; 条件; 递增表达式){
  2. 循环体
  3. }

以上结构的执行过程为,初始表达式只执行一次,判断条件是否为真,若问真,则执行循环体,然后执行递增表达式,再执行条件判断,若条件为真,则再次执行循环体,再执行递增表达式,以此类推,直至遇到break语句或者结束。

循环中的两个重要语句

break:

退出当前所在的整个循环

continue:

退出这一次的循环,执行下一次循环