变量

声明

var x = 0;// valid
y = 0; // also valid

声明不是必需的。

类型

不需要进行类型声明的语言被称为弱类型语言。
注意,弱类型是不需要声明类型,而不是不存在类型的语言。
JavaScript是弱类型语言,包含字符串、数值、布尔值类型。
字符串:单引号与双引号无区分。包括它本身时需要转义。
数值:所有数值都是浮点数。
布尔值:true, false

字符串、数组、布尔值都被称为离散值。离散值在某一时刻只能具有一个值。
相对地,如果想在某一时刻使一变量对应多个值,我们可以使用数组。

var x = Array(4);

Array 是关键字。4 是可选的长度参数。
和 C 一样,下标从 0 开始。

数组可以被这样赋值。

var x = Array();
x[0] = 'cogs';
x[1] = "spoj";
x[2] = 'countonthetree';

var y = Array("haoi", 2017, "fake");

对,Array(3) 和 Array(3,3) 的行为完全不一致……前者创建一个3空元素的数组,后者创建一个长度为2,内容为两个3的数组。

事实上,js 中数组的能力远远超出我们以往认知中的 C/C++ 数组。来看看这样的用法:

var x = Array();
x['cydiater'] = Array('very', 'niubi');
x['rapiz'] = Array('is', 1, 'fish');
x['rapiz']['fans'] = Array('zqr', 'kzf');
  • 一个数组可以包含不同类型的数据。
  • 一个数组可以用字符串、数值作为下标。
  • 一个数组可以包括数组。

所以你可以把数组看成任意离散值到值(离散或者不离散)的映射。

运算

常见的那些C运算符(算术、比较、逻辑、赋值)这里都有。
可以用+-对字符串进行拼接。

‘10’ + 20 会获得 ‘1020’。可见这里出现了隐式类型转换,并且数值被提升成了字符串。
从设计的角度来想一想这个事情。否则呢?把字符串转成数值显然是不太合理的,因为需要规定对溢出、编码等问题的处理方式。

流程控制

if, while, for, do…while 和 C 一样。

if(condition) {
statement
}
if () ;

while(condition) {
statement
}
while() ;

do {
statement
}while(condition)
do while();

for(a;b;c) {
statement
}
for(;;);

函数

终于来到这里。

function liveALife(gift, efforts) {
  var threeyears = ['battle', 'commitment', 'ash'];
  for(var i = 0; i < 3; i++) {
    alert(threeyears[i]);
  }
  return false;
}

function 开头,括号中声明形参。
弱类型,所以直接 function, 直接写行参,return 不必需。

对象

JS 中的对象,具有两种形式的数据,属性和方法。
假设我们有一个 GodCow 对象,我们可以这样声明它的实例。

var cydiater = new GodCow();

前面的 Array 就是 JavaScript 的一个内建对象。还有很多有用的对象被内建在 JS 中。