[TOC]
# JavaScript基础
## JavaScript的特点
1. 解释型语言:解释型语言直接在运行环境中执行代码,一般一来说,与编译型语言相比,解释型语言的开发更为容易。
2. 类似于C和Java的语法结构
3. 动态语言:动态语言的变量和函数是不指定返回值类型的。
4. 基于原型的面向对象
5. 字面量的表现能力
6. 函数式编程:很长的一段时间里都被隐藏于过程式编程(面向对象也是过程式编程的一种)的概念至下。由于具备了匿名函数,可以把函数作为对象来使用,所以同时也能够支持函数式编程。
## 变量的基础
变量的作用是给某一个值或是对象标注名称,通过使用关键字`var`就可以对变量进行声明。
### 变量的使用方法
```javascript
var foo; // 声明变量
foo = 'abc'; // 对变量进行赋值
var foo2 = 'def'; // 声明变量并赋值
```
读取没有被声明的变量,就会引发`ReferenceError`异常。
## 省略var
不通过`var`声明的变量为隐式声明变量,会变为全局变量,即使在函数体内也是。
### 常量
```javascript
const FOO = 'abc'; // 通过关键词 const 进行声明, 习惯上变量名为大写。
```
即使给常量再次赋值,这个常量的值也不会发生改变。其实,对常量再次赋值是一种错误。
## 函数基础
函数是由一连串的子程序(语句的集合)所组成的,可以被外部程序调用。向函数传递参数之后,函数可以访问一定的值。
### 函数的声明与调用
```javascript
function 函数名 (参数, 参数, ...){
函数体
}
function sum(a,b){
return a + b;
}
```
### 匿名函数
其语法形式为在`function`后省略函数名的函数。
```javascript
function (参数, 参数, ...){
函数体
}
```
匿名函数表达式是一种表达式而非语句,所以也可以在表达式内使用。匿名函数的返回值是一个`Function`对象的引用。
```javascript
var sum = function(a,b){
return a + b;
}
```
### 函数是一种对象
JavaScript中的函数也是一种对象。函数名存在的意义是为了调用没有名称的函数。函数是一种包含了可执行代码并能够被其他代码调动的特殊的对象。
## 对象基础
### 对象的定义
是一个名称与值配对的集合。这种名称与值的配对被称为属性。JavaScript对象可以定义为属性的集合。JavaScript具备一种称为原型链的构造。通过这一构造,JavaScript对象实现了类似于类的继承能力。
### 对象字面量表达式与对象的使用
```javascript
{
属性名: 属性值,
属性名: 属性值
}
```
属性名可以是标识符、字符串值或是数值。属性值则可以是任意的值或对象。
```javascript
{
a: 'abc',
1: '1'
}
```
在版本较老的IE中不支持以逗号结尾的对象字面量。
### 属性访问
```javascript
var obj = {
a: 'abc',
b: 'cba'
}
// 点运算符
obj.a // 'abc'
obj.c = 'ccc'; // 赋值
// 括号方式
obj[a] // 'abc'
obj['d'] = 'ddd'; // 赋值
```
### 方法
可以把任意类型的值、对象或者函数赋值给对象的属性。实际上作为对象属性的函数也可称为一种方法。
```javascript
var obj = {
sum: function(a, b){
return a + b;
}
}
obj.sum(1,2); // 3
```
### new 表达式
`new`表达式的作用是生成一个对象。
```javascript
var obj = new Object();
```
`new`之后所写的是函数名,在`new`之后写函数名的话,就会把该函数作为构造函数进行调用。
## 数组的基础
数组是一种用于表达有顺序关系的值的集合的语言结构。
```javascript
var arr = [1, 100, 1000];
```
数组内的各个值被称作为元素,每一个元素都可以通过索引(下标)来快速读取
```javascript
var arr = [1, 100, 1000];
arr[0]; // 1
arr[1]; // 100
```
JavaScript的数组支持同时包含不同类型的元素。