Javascript语法借鉴于 Java,Awk,Perl,Python,并且是大小写敏感的,使用Unicode字符集编码。在Javascript中,指令叫做语句,语句用分号
;
隔开,语句可以不加分号(不推荐)。
注释
注释的规则跟C++和其他语言类似,单行注释用//
,多行注释通过/*注释内容*/
:
声明
** var **
声明一个变量,在声明变量的同时可以赋值(可选)
** let **
声明一个块级作用域局部变量,可以赋初始值(可选)
** const **
声明一个只读的命名常量
变量
变量作为引用值的一个标识符(符号),标识符遵循以下规则:
以字母、下划线或者$符号开头,可以使用Unicode字符集;标识符大小写敏感,即foo、Foo、fOo是不同的标识符
声明变量
你可以通过以下方式声明变量:
- 使用关键字var, 例如:
var x = 42;
这种方式用来声明全局变量和局部变量; - 简单地直接赋值,如:
x = 42;
这种方式声明了一个全局变量(不推荐使用); - 使用关键字let,如:
let y = 13
,被用来声明一个块级作用域局部变量;
使用var或者let进行变量声明时没有赋初始值,变量将会得到undefined值,获取未定义变量的值将报错(thrown ReferenceError
exception),如:
var a; console.log("The value of a is " + a); // logs "The value of a is undefined" console.log("The value of b is " + b); // throws ReferenceError exception
在数值计算中,undefined值参与运算将被转为NaN:
var a; a + 2; // Evaluates to NaN
在数值计算中,null值参与运算将被转为0:
var a = null; a + 2; // Evaluates to 2
变量作用域
在函数作用域外面定义变量,将得到全局变量,在函数内定义变量将得到局部变量。在ES6以前Javascript没有块级作用域,使用let声明变量将得到块级作用域局部变量;
if (true) { let y = 5; } console.log(y); // ReferenceError: y is not defined
变量提升####
变量提升:引用其后的变量声明不报错,声明的变量被提升到函数开头或者作用域起始位置,被提升的变量会返回undefined值:
因为变量提升,所有var声明语句应该尽可能放在函数定义的顶部
全局变量
事实上,全局变量是全局对象的属性,在浏览器中,全局对象是window,所以你能通过window.variable调用。
常量
使用关键字const定义常量,定义常量必须初始化,其作用域跟let一样,不能跟函数或者变量重名:
数据结构和类型
数据类型
最新的ECMAScript标准定义了7种数据类型:
- 6种基本数据类型:
- Boolean. true和false;
- null.
- undefined.
- Number.
- String.
- Symbol.(ES6新类型)
- Object对象
数据类型比较
Javascript是动态类型语言,声明变量时不用指定类型。
在数值计算中,+运算符的问题在于它可能有两种含义。如果把它用在数字上,它意味着把两个数字相加,但是如果把它用在字符串上,它意味着把两个字符串连接或者拼合在一起。Javascript处理字符串连接的优先级高于数字求和。 Javascript从左至右遍历+运算符,并分别根据它们的含义决定是相加还是连接。
x = "The answer is " + 42 // "The answer is 42" y = 42 + " is the answer" // "42 is the answer" "37" - 7 // 30 "37" + 7 // "377"
字面量
Array 字面量###
var coffees = ["French Roast", "Colombian", "Kona"];
额外的逗号
Array字面量中最后的逗号会被忽略,其他空位上的分号会被解析成undefined,最好显式声明undefined:
本文翻译整理自:
MDN **转载请注明出处 **