二.JavaScript的语言基础

前言

  任何一门编程语言的核心都是这么语言如何在最基本的方面如何工作涉及语法、操作符、数据类型以及内置功能,在此基础之上才可以构建复杂的解决方案。如前所述,ECMA-262 以一个名为 ECMAScript 的伪语言的形式,定义了 JavaScript 的所有这些方面。

1. 词法结构

1.1 语法

  ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C 语言,如 Java 和 Perl 。熟悉这些语言的开发者,应该很容易理解 ECMAScript 宽松的语法。

1.2 区分大小写

  JavaScript 区分大小写无论是变量、函数名还是操作符,都区分大小写。比如,while 关键字必须写成“while”,不能写成“While”或“WHILE”。类似地,online、Online、OnLine 和 ONLINE 是4个完全不同的变量名。为了证明这一点,我们可以在 JavaScript 控制台中测试下列语句(每输入一行按一次Enter键):

var case_matters = '我是小写'; 
var CASE_MATTERS = '我是大写'; 
case_matters; 
CASE_MATTERS; 

1.3 标识符

  标识符,就是变量、常量、函数、属性、函数和函数参数、类的名称。标识符可以由一或多个下列字符组成:

  • JavaScript 标识符必须以字母、下划线(_)或美元符号($)开头。

  • 后续字符可以是字母、数字、下划线或美元符号(数字不能作为第一个字符,以便JavaScript区分标识符和数值)。
    以下都是合法的标识符:

在这里插入图片描述

1.4 注释

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

// 单行注释

  块注释(多行注释)以一个斜杠和一个星号(/*)开头,以它们的反向组合(*/)结尾,可以跨行,但不能嵌套,如:

/*这也是注释*/ //而这是另一个注释

/*这是多行注释。
*每行开头额外的
*字符不是必需的,只是为了美观 
*/

1.5 严格模式

  ECMAScript 5 增加了严格模式(strict mode)的概念。严格模式是一种不同的 JavaScript 解析和执行模型,ECMAScript 3 的一些不规范写法在这种模式下会被处理,对于不安全的活动将抛出错误。要对整个脚本启用严格模式,在脚本开头加上这一行:

"use strict";

  虽然看起来像个没有赋值给任何变量的字符串,但它其实是一个预处理指令。任何支持的 JavaScript 引擎看到它都会切换到严格模式。选择这种语法形式的目的是不破坏 ECMAScript 3 语法。也可以单独指定一个函数在严格模式下执行,只要把这个预处理指令放到函数体开头即可:

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

  严格模式会影响 JavaScript 执行的很多方面,主流浏览器现在实现了严格模式。但是不要盲目地依赖它,因为市场上仍然有大量的浏览器版本只部分支持严格模式或者根本就不支持(比如 IE10 之前的版本)。

1.6 字面量

  字面量(literal)是一种直接出现在程序中的数据值。简单来说就是在程序通过观察就可以知道这个值是什么类型。下面这些都是字面量:

在这里插入图片描述

  后续将详细介绍数值和字符串字面量。

1.7 关键字与保留字

  ECMA-262 描述了一组保留的关键字,这些关键字有特殊用途,比如表示控制语句的开始和结束,或者执行特定的操作。按照规定,保留的关键字不能用作标识符或属性名。ECMA-262 第6版规定的所有关键字如下:

breakdointypeof
caseelseinstanceofvar
catchexportnewvoid
classextendsreturnwhile
continueforswitchyield
debuggerfunctionthis
defaultifthrow
deleteimporttry

  JavaScript 也保留或限制对某些关键字的使用,这些关键字当前并未被语言所用,但将来某个版本有可能会用到。

  始终保留:

  enum

  严格模式下保留:

implementspackagepublic
interfaceprotectedstatic
letprivate

  模块代码中保留:

  await

  在进行编程时这些词汇不能用作标识符,但现在还可以用作对象的属性名。一般来说,最好还是不要使用关键字和保留字作为标识符和属性名,以确保兼容过去和未来的 ECMAScript 版本。

1.8 分号的使用

  JavaScript 使用分号(;)分隔语句。这对于保持代码清晰很重要:如果没有分隔符,一条语句的结尾可能是另一条语句的开头,反之亦然。

  在 JavaScript 中,如果两条语句分别写在两行,通常可以省略它们之间的分号。另外,在程序末尾,如果接下来的记号是右花括号},那么也可以省略分号。

let sum = a + b      // 没有分号也有效,但不推荐
let diff = a - b;    // 加分号有效,推荐

  然而,像下面这样写,分号就是必需的:

a = 3; b = 4

  JavaScript 并非任何时候都把换行符当作分号,而只是在不隐式添加分号就无法解析代码的情况下才这么做。JavaScript 只在下一个非空格字符无法被解释为当前语句的一部分时才把换行符当作分号。下面有个例子:

let a
a
=
3
console.log(a)

  JavaScript 将以上代码解释为:

let a; a = 3; console.log(a);

  第一处换行符如果不作为分号解释,那么 JavaScript 就无法解析代码 let a a。在第二处换行符处没有将其解释为分号,是因为还可以解析更长的语句 a = 3;。


  上述的这些规则会在遇到某些情况时中断,下面看以下的代码:

let y = x + f
(a+b).toString()

  由于这里的第二行处的圆括号可以被解释为第一行 f 的函数调用,所以 JavaScript 会这样解释这两行代码:

let y = x + f(a+b).toString();

  以上这种情况就会就会导出出现语句的歧义,所以为了确保代码正常运行,这里就必须加上分号。


  JavaScript 在不能把第二行解析为第一行的连续部分时,对换行符的解释有三种例外情况。

  第一种情况涉及 return、throw、yield、break 和 continue 语句,这些语句经常独立存在,但有时候后面也会跟一个标识符或表达式。如果这几个单词后面(任何其他标记前面)有换行符,JavaScript就会把这个换行符解释为分号。例如,如果你这么写:

return
true;

  JavaScript 假设你的意图是:

return;true;

  但你的意图可能是:

return true;

  这意味着,一定不能在 return、break 或 continue 等关键字和它们后面的表达式之间加入换行符。如果加入了换行符,那代码出错后的调试会非常麻烦,因为错误不明显。

  第二种例外情况涉及 ++ 和 – 操作符。这些操作符既可以放在表达式前面,也可以放在表达式后面。如果想把这两个操作符作为后置操作符,那它们必须与自己操作的表达式位于同一行。

  第三种例外情况涉及使用简洁的“箭头”语法定义的函数:箭头=>必须跟参数列表在同一行。

2. 小结

  本次大致介绍了一下 JavaScript 的词法的重点内容,为 JavaScript 的学习打下了一个结实的基础,后续将对 JavaScript 中的变量以及数据类型进行学习。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小天Giser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值