前言

本文主要简述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
  • 在严格模式下,不能定义名为evalarguments的变量,否则会导致语法错误。

总结

本文总结分为如下三大部分,以下总结不知道原理的,评论区见。

与C++/Java不同之处

  • 标识符可以用美元符号($)为开头。
  • 语句末尾可以省略分号,如果省略分号,则由解析器决定句尾。
  • 变量是松散类型的。
  • 定义变量前使用var操作符,带var的变量是局部变量,反之为全局变量。
  • 定义一个未初始化的变量,其值为undefined

严格模式

  • 在严格模式下,对保留字增加了限制。
  • 在严格模式下,不能定义名为evalarguments的变量,否则会导致语法错误。

Effective小技巧

  • 强烈建议,使用单行注释。(为什么?)
  • 强烈建议,每条语句都以分号结尾。(为什么?)