JavaScript的语法基础
盼星星、盼月亮,终于来到了JavaScript的语法基础。换句话说,很多小白前面的内容估计都没看,直接奔着JavaScript语法来了,作者在这一方面也是下了很大的功夫,闲言少叙,让我们开始吧~
语法的背景
ECMAScript的语法在很大程度上借鉴了C语言和其它类C语言,如Java和Perl,如果读者对这些语言比较熟悉的话,理解ECMAScript会比较容易的~
大小写的区别
首先我们要知道的是,ECMAScript中一切都区分大小写,无论是变量、函数名还是操作符,都区分大小写。咱换句话说,变量t跟变量T是两个不同的变量,类似的,typeof
不能作为函数名,因为它是一个关键字,但是咱们的Typeof
是一个完全有效的函数名
标识符
我们通常说的标识符,就是变量、函数、属性、函数参数的名称,标识符可以由一或多个下列字符组成
- 第一个标识符必须是字母,下划线(__)或者美元符号($)
- 剩下的字符可以是字母、下划线、美元符号或者数字
- 标识符中的字母可以使扩展
ASCII
中的字母,也可以是Unicode
的字母字符
按照惯例,我们一般使用驼峰命名法,即第一个单词的首字母小写,后面每个单词的首字母大写
注意注意注意!!!
关键字、保留字、true、false和null不能作为标识符
注释
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); }
在我们日常写代码的时候,我们更希望每写一个控制语句就是变成一个代码块,这样可以让内容更清晰,修改代码的时候也能更方便(主要是能够促进组内开发人员的和谐气氛~)
关键字与保留字
当当当!各位心心念念的关键字与保留字终于来咯~
break | do | in | typeof |
case | else | instanceof | var |
catch | export | new | void |
class | extends | return | while |
const | finally | super | with |
continue | for | switch | yield |
debugger | function | this | |
default | if | throw | |
delete | import | try |
在上方规范中,我们还描述了一组未来的保留字,同样不能用作标识符或属性名,虽然保留字在语言中没有特定用途,但是它们是保留给将来做关键字用的
始终保留
enum
严格模式下保留
implements | package | public |
interface | protected | static |
let | private |
模块代码中保留
await
这些词汇不能用作标识符,但是可以用做对象的属性名(其实作者也不建议用,以防混淆),以确保兼容过去和未来的ECMAScript版本