JavaScript提升系列(三):语法与变量
前言
本文主要简述JavaScript的语法与变量。
虽然大部分内容都与C++/Java相似,但为了尽可能完整,我还是会将相似部分列出来,我会把JavaScript与C++/Java语言不同的地方加粗显示。
如果你为了追求极致的学习速度,想知道JavaScript与C++/Java不同之处,请直接翻到文末小结部分。
一、语法
ECMAScript的语法大量借鉴了C及其它类C语言的语法。
区分大小写
ECMAScript中所有的变量、函数名、操作符都区分大小写。
标识符
标识符,指变量、函数、属性的名字,标识符规则如下:
- 第一个字符必须是字母,下划线(_),或者美元符号($)。
- 其它字符可以是字母,下划线,美元符号和数字。
标识符中可以包含扩展的ASCII和Unicode字母字符,但不推荐这样做。
注释
ECMAScript使用C风格注释,包括单行注释和块状注释。
(推荐使用单行注释,不清楚为什么的,我在评论区等你。)
严格模式
ECMAScript5引入了严格模式的概念,严格模式是为JavaScript定义了一种不同的解析和执行模型。严格模式下,ECMAScript3中一些不确定的行为将得到处理,而且对某些不安全的操作会抛出错误。
要启用严格模式,需要在顶部加入如下代码:
use strict;
其本质是一个编译指示,用于告诉JavaScript引擎切换到严格模式。
语句
ECMAScript中的语句以分号结尾;如果省略分号,则由解析器确定语句结尾
强烈建议每条语句以分号结尾,这样做的好处:
- 增进代码性能。
- 避免很多错误(例如不完整的输入)。
- 开发人员可以放心大胆的压缩代码。
二、关键字和保留字
关键字,用于表示控制语句的开始或结束,或执行特定操作,不能用于标识符。
ECMAScript5全部关键字如下:
break | do | instanceof | typeof |
---|---|---|---|
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger | function | this | with |
default | if | throw | delete |
in | try | ||
保留字,关键字备胎,暂无特定用途,未来可能会升级为关键字。 | |||
ECMAScript3全部保留字如下: | |||
abstract | enum | int | short |
– | – | – | – |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
debugger | implements | protected | volatile |
double | import | public | |
ECMAScript5把非严格模式下运行的保留字缩减为下列这些: | |||
class | enum | extends | super |
– | – | – | – |
const | export | import | |
在严格模式下,ECMAScript5对以下保留字施加了限制: | |||
implements | package | public | interface |
– | – | – | – |
private | static | let | protected |
yield | |||
不要使用保留字和关键字作为标识符! |
三、变量
- ECMAScript的变量是松散类型的,即可以用来保存任何类型的变量。定义变量时,要使用
var
操作符。 - 定义一个未初始化的变量,该变量会保存一个特殊的值
undefined
。
var tmp1; //tmp1=undefined
- 使用
var
操作符定义的变量将成为该变量作用域中的局部变量。
function test(){
var message = "hi";
}
test();
alert(message); //ReferenceError: message not defined.
- 省略
var
操作符,会创建一个全局变量。
funcrion test(){
message = "hi";
}
test();
alert(message); // hi
- 在严格模式下,不能定义名为
eval
或arguments
的变量,否则会导致语法错误。
总结
本文总结分为如下三大部分,以下总结不知道原理的,评论区见。
与C++/Java不同之处
- 标识符可以用美元符号($)为开头。
- 语句末尾可以省略分号,如果省略分号,则由解析器决定句尾。
- 变量是松散类型的。
- 定义变量前使用
var
操作符,带var
的变量是局部变量,反之为全局变量。 - 定义一个未初始化的变量,其值为
undefined
。
严格模式
- 在严格模式下,对保留字增加了限制。
- 在严格模式下,不能定义名为
eval
或arguments
的变量,否则会导致语法错误。
Effective小技巧
- 强烈建议,使用单行注释。(为什么?)
- 强烈建议,每条语句都以分号结尾。(为什么?)