软件语言的词法结构:
“指定一组基本规则,定义代码应该或可以如何编写”
作为世界上最容易被误解的编程语言之一,也是一种具有一些奇怪之处的软件语言,在编写 JavaScript 时,出现了许多关于什么是最佳实践的问题。在这篇博客中,我们将深入探讨JavaScript 的词法结构。词法结构只是指定一组基本规则,定义如何用给定语言编写代码。
统一码
JavaScript 是用 Unicode 编写的。这是什么意思?好吧,其中一个很酷、很少使用且通常被认为是不好的做法是我们实际上可以使用表情符号作为变量名。我们可以使用表情符号作为变量名,因为 JavaScript 是用 Unicode 编写的。更重要的是,您可以按照一些规则用任何语言(例如日语或中文)编写标识符。
可选分号
在 JavaScript(以及大多数其他语言)中,分号用于将一个给定语句与另一语句分隔开。JavaScript 的奇怪之处在于这个分号是可选的。就我个人而言,我选择不使用分号,而是将我的陈述写在两个单独的行上。写在同一行上的任何两个语句总是需要使用分号来分隔它们 - 但这本身被认为是不好的做法。
空格和换行符
在 JavaScript 中,空格不被视为任何有意义的东西。可以根据需要添加空格和换行符。
例如
axios.get(endpoint).then(response => console.log(response)).catch(errors => console.error(errors))
也可以写成
axios.get(endpoint).then(response => console.log(response)).catch(errors => console.error(errors))
或作为
axios.get(endpoint).then(response => console.log(response)).catch(errors => console.error(errors))
JavaScript 不关心空白。就我个人而言,我将使用以下语法来处理前一个语句。
axios.get(endpoint)
.then(response => console.log(response))
.catch(errors => console.error(errors))
在现实世界中,您肯定希望保持明确的样式并遵守常用的样式。您可以并且在较大的项目中应该使用 linter 或Prettier等样式工具强制执行此样式。
区分大小写
JavaScript 区分大小写。这对于软件语言意味着什么?如果您有两个拼写相同单词的变量,并且一个是大写的,而另一个不是大写的,那么它们将被视为两个不同的变量。
let helloWorld = 'example'let HelloWorld = 'heyooo'
HelloWorld和helloWorld是两个不同的变量,因为 JS 区分大小写。
关键字、变量、函数名和其他标识符必须始终以一致的字母大写形式键入,以表示相同的含义。
评论
好旧的评论。在 JavaScript 中,我们有两种类型的注释,我们可以利用或调用它们来添加在代码中具有功能意义的注释。
单行评论
// this is a single line comment
多行注释
/*
This is a multiple line
comment that we can
use to write a lot
of stuff when
we need to.
*/
文字和标识符
文字被定义为在源代码中写入的值。
例如,字符串、数字、布尔值、对象文字或数组文字都是文字。
10 // a number literaltrue // a Boolean literal'hey' // a string literal[1, 2] // an array literal{ name: 'sarah' } // an object literal
标识符只是用于标识变量、函数或对象的字符序列 。 标识符可以以字母、美元符号 ($)、下划线 (_) 开头,也可以包含数字 。 使用 unicode,字母可以被视为任何允许的字符 - 因此我们也可以使用表情符号。理解标识符含义的另一种方法是简单地问自己在这种语言中我可以使用哪些允许的变量名称。
NamenameNAME_name$name😄
是否都是允许的变量名 - 又名 JavaScript 中允许的标识符。
保留字
大多数(如果不是全部)软件语言都有保留字列表。这些保留字做了一些特殊的事情,使软件语言能够正常工作。在 JavaScript 中,我们有一个保留字列表,由于语言保存这些单词以实现特殊功能,因此不允许将其用作标识符。
JavaScript 中的一些保留字包括:
抽象的
论点
布尔值
休息
字节
案件
抓住
字符
班级
常量
继续
调试器
默认
删除
做
双倍的
别的
枚举
评估
出口
漂浮
延伸
错误的
功能
最终的
去
如果
最后
漂浮
实施
屈服
进口
在
实例化
整数
界面
让
包裹
私人的
郎
本国的
新的
无效的
受保护的
民众
返回
短的
静止的
极好的
转变
同步的
这
扔
投掷
短暂的
真的
尝试
类型
var-void
易挥发的
尽管
和
abstract
arguments
boolean
break
byte
case
catch
char
class
const
continue
debugger
default
delete
do
double
else
enum
eval
export
float
extends
false
function
final
goto
if
finally
float
implements
yield
import
in
instanceof
int
interface
let
package
private
lang
native
new
null
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
true
try
typeof
var -void
volatile
while
with
请注意,目前并非所有保留字都在 JavaScript 中执行某些操作。其中许多保留字被该语言简单地标记为不可用,以便这些保留字向 JavaScript 添加行为的 JavaScript 的未来版本不会导JavaScript 程序的遗留应用程序中断或需要更改,因为它们使用了现在的关键字在这些关键字能够在 JS 中执行任何操作之前,先执行一些作为标识符的操作。