# 变量的声明
JavaScript允许程序员直接对变量赋值而无需事先声明。这在许多程序设计语言中是不允许的。虽然JavaScript没有强制要求程序员必须提前声明变量,但提前声明变量是一种良好的编程习惯。下面的语句对变量foo和bar做出了声明:
```
var foo;
var bar;
```
# 变量的类型
## 字符串
字符串由零个或多个字符构成。字符包括(但不限于)字母、数字、标点符号和空格。字符串必须包在引号里,单引号或双引号都可以,并没有什么区别。作为一个好的编程习惯,不管选择用双引号还是单引号,请在整个脚本中保持一致。
```
var name = 'Zhang';
var username = "Li Ren";
```
## 数值
Javascript不区分整数(integer)和浮点数(floating-pointnumber)。
var age = 41;
var temperature = 36.7;
## 布尔值
布尔数据只有两个可选值——true或false。
```
var switch = true;
```
## 数组
以上介绍的都是标量(scalar)。数组是指用一个变量表示一个值的集合,集合中的每个值都是这个数组的一个元素(element)。
一种创建数组的方式:
```
//var arr = Array(2); //可以指定数组的长度,但是并没有什么意义。
var arr = [];
arr[0] = 'good';
arr[1] = 3.1;
alert(arr[1])
```
还可以这样创建:
```
var arr = ['good', 3.1];
```
## 对象
对象的声明方式有如下两种。
```
var arr = Object();
var arr = {};
arr = {'name': 'Pat', 'address': 'China'};
```
## 实例
比较两个字符串的相似度,忽略字符的顺序,并按相似度排序。
```
/* 比较长字符串和短字符串的相似度
* 忽略字符的顺序,利用hash存储并排序
*/
function sameValue(a, b) {
let hit = 0;
if (b.length > a.length) {
c = a;
a = b;
b = c;
}
l = a.length;
m = b.length;
for (let i = 0; i < l; i++) {
for (let j = 0; j < m; j++) {
if (a[i] === b[j]) {
++hit;
break;
}
}
}
return parseInt((1 - hit / l) * 100); //返回值为0-100,0为相同,100为完全不同
}
var arr = [];
for (let i = 0; i < 1000; ++i) {
let a = '' + Math.random(); //生成随机字符串
let b = '' + Math.random(); //生成随机字符串
let hit = sameValue(a, b);
let realHit = hit;
while (hit in arr) ++hit;
arr[hit] = realHit; //此行为debug,应该替换成真实的值
}
console.log(arr);
```