你真的了解JavaScript基础吗?

209 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

JavaScript的语法基础

盼星星、盼月亮,终于来到了JavaScript的语法基础。换句话说,很多小白前面的内容估计都没看,直接奔着JavaScript语法来了,作者在这一方面也是下了很大的功夫,闲言少叙,让我们开始吧~

语法的背景

ECMAScript的语法在很大程度上借鉴了C语言和其它类C语言,如JavaPerl,如果读者对这些语言比较熟悉的话,理解ECMAScript会比较容易的~

大小写的区别

首先我们要知道的是,ECMAScript中一切都区分大小写,无论是变量、函数名还是操作符,都区分大小写。咱换句话说,变量t跟变量T是两个不同的变量,类似的,typeof不能作为函数名,因为它是一个关键字,但是咱们的Typeof是一个完全有效的函数名

标识符

我们通常说的标识符,就是变量、函数、属性、函数参数的名称,标识符可以由一或多个下列字符组成

  • 第一个标识符必须是字母,下划线(__)或者美元符号($)
  • 剩下的字符可以是字母、下划线、美元符号或者数字
  • 标识符中的字母可以使扩展ASCII中的字母,也可以是Unicode的字母字符

按照惯例,我们一般使用驼峰命名法,即第一个单词的首字母小写,后面每个单词的首字母大写

注意注意注意!!!

关键字、保留字、true、falsenull不能作为标识符

注释

ECMAScript采用C语言风格的注释,包括单行注释和块注释,单行注释是以两个斜杠字符开头

// 这里是单行注释

块注释是以一个斜杠和一个星号(*/)开头,以它们的反向组合(*/)结尾

/*
这里是块注释
*/

严格模式

ECMAScript5采用严格模式(strict mode)的概念,严格模式是一种不同的JavaScript解析和执行模型,一些不规范的写法会被处理掉,对于不安全的活动将会抛出错误,整个脚本会采用严格模式,我们只需要在脚本开头加上一行

use strict”

我们单看这一行代码,感觉没有啥用,但其实是一个预处理的命令,任何支持JavaScript引擎看到它都会切换成严格模式~

有时候我们不想把全局代码都设置成严格模式,那该怎么办呢?

我们可以单独指定一个函数在严格模式下执行,我们只需要把这个预处理命令放到函数体开头即可

function something() {
            "use strict"
            //函数体
        }

严格模式会影响JavaScript执行的很多方面,当我们用到的时候,作者会指出来,大家放心即可。此外,所有现代浏览器都支持严格模式

语句

ECMAScript中的语句都会以分号结束,省略分号意味着解析器确定语句在哪里收尾

    <script>
        let sum = a +b 
        let diff = a - b ;
    </script>

这两行代码都能正常运行,即使没有加上分号,代码也能正常,这是因为浏览器会自动帮我们纠正一些语法错误,但是在日常开发中,我们还是要加上分号~

其它语句风格

多条语句可以合并到一个C语言风格的代码块中,代码块由一个左花括号( { )标识开始,一个右花括号标识( } )结束

<script>
   if(test){
       test = false;
       console.log(test);
   }
</script>

if之类的语句只在执行多条语句的时候要求必须有代码块,不过最佳实践还是在控制语句中使用代码块,即便我们只执行一条语句

//有效,但是不推荐
if(test)
    console.log(test);
​
//推荐,非常有必要
if(test){
    console.log(test);
}

在我们日常写代码的时候,我们更希望每写一个控制语句就是变成一个代码块,这样可以让内容更清晰,修改代码的时候也能更方便(主要是能够促进组内开发人员的和谐气氛~)

关键字与保留字

当当当!各位心心念念的关键字与保留字终于来咯~

breakdointypeof
caseelseinstanceofvar
catchexportnewvoid
classextendsreturnwhile
constfinallysuperwith
continueforswitchyield
debuggerfunctionthis
defaultifthrow
deleteimporttry

在上方规范中,我们还描述了一组未来的保留字,同样不能用作标识符或属性名,虽然保留字在语言中没有特定用途,但是它们是保留给将来做关键字用的

始终保留

enum

严格模式下保留

implementspackagepublic
interfaceprotectedstatic
letprivate

模块代码中保留

await

这些词汇不能用作标识符,但是可以用做对象的属性名(其实作者也不建议用,以防混淆),以确保兼容过去和未来的ECMAScript版本