# 變量的聲明
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);
```