1.變量
var 申明一個變量
如果一個變量沒有通過var申明就被使用枫耳,那么該變量就自動被申明為全局變量:
i = 10; ? //i 現(xiàn)在時全局變量
使用var申明的變量則不是全局變量咽块,它的范圍被限制在該變量被申明的函數(shù)體內(nèi)(函數(shù)的概念將稍后講解)霹疫,同名變量在不同的函數(shù)體內(nèi)互不沖突。
為了修補JavaScript這一嚴(yán)重設(shè)計缺陷岛杀,ECMA在后續(xù)規(guī)范中推出了strict模式憎妙,在strict模式下運行的JavaScript代碼,強制通過var申明變量绞吁,未使用var申明變量就使用的,將導(dǎo)致運行錯誤寡键。
啟用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';
2.字符串
JavaScript的字符串就是用''或""括起來的字符表示。
如果'本身也是一個字符雪隧,那就可以用""括起來西轩,比如"I'm OK"包含的字符是I,'脑沿,m藕畔,空格,O庄拇,K這6個字符注服。
如果字符串內(nèi)部既包含'又包含"怎么辦?可以用轉(zhuǎn)義字符\來標(biāo)識措近,比如:
'I\'m \"OK\"!';
表示的字符串內(nèi)容是:I'm?"OK"!
需要特別注意的是溶弟,字符串是不可變的,如果對字符串的某個索引賦值瞭郑,不會有任何錯誤辜御,但是,也沒有任何效果:
vars?='Test';
s[0]?='X';
alert(s);//?s仍然為'Test’
2.1 字符串語法:
toUpperCase
vars?='Hello';
s.toUpperCase();//?返回'HELLO'
toLowerCase
toLowerCase()把一個字符串全部變?yōu)樾懀?/p>
vars ='Hello';varlower = s.toLowerCase();// 返回'hello'并賦值給變量lowerlower;// 'hello'
indexOf
indexOf()會搜索指定字符串出現(xiàn)的位置:
vars ='hello, world';s.indexOf('world');// 返回7s.indexOf('World');// 沒有找到指定的子串屈张,返回-1
substring
substring()返回指定索引區(qū)間的子串:
vars?='hello,?world'
s.substring(0,5);//?從索引0開始到5(不包括5)擒权,返回'hello'
s.substring(7);//?從索引7開始到結(jié)束,返回'world'
3.數(shù)組
vararr?=?[1,2,3.14,'Hello',?null,?true];
arr.length;//?6
slice()就是對應(yīng)String的substring()版本阁谆,它截取Array的部分元素碳抄,然后返回一個新的Array:
vararr = ['A','B','C','D','E','F','G'];arr.slice(0,3);// 從索引0開始,到索引3結(jié)束场绿,但不包括索引3: ['A', 'B', 'C']arr.slice(3);// 從索引3開始到結(jié)束: ['D', 'E', 'F', 'G']
注意到slice()的起止參數(shù)包括開始索引剖效,不包括結(jié)束索引。
如果不給slice()傳遞任何參數(shù)焰盗,它就會從頭到尾截取所有元素贱鄙。利用這一點,我們可以很容易地復(fù)制一個Array:
vararr = ['A','B','C','D','E','F','G'];varaCopy = arr.slice();aCopy;// ['A', 'B', 'C', 'D', 'E', 'F', 'G']aCopy === arr;// false
push和pop
push()向Array的末尾添加若干元素姨谷,pop()則把Array的最后一個元素刪除掉:
vararr = [1,2];arr.push('A','B');// 返回Array新的長度: 4arr;// [1, 2, 'A', 'B']arr.pop();// pop()返回'B'arr;// [1, 2, 'A']arr.pop(); arr.pop(); arr.pop();// 連續(xù)pop 3次arr;// []arr.pop();// 空數(shù)組繼續(xù)pop不會報錯逗宁,而是返回undefinedarr;// []
unshift和shift
如果要往Array的頭部添加若干元素,使用unshift()方法梦湘,shift()方法則把Array的第一個元素刪掉:
vararr = [1,2];arr.unshift('A','B');// 返回Array新的長度: 4arr;// ['A', 'B', 1, 2]arr.shift();// 'A'arr;// ['B', 1, 2]arr.shift(); arr.shift(); arr.shift();// 連續(xù)shift 3次arr;// []arr.shift();// 空數(shù)組繼續(xù)shift不會報錯瞎颗,而是返回undefinedarr;// []
sort
sort()可以對當(dāng)前Array進行排序件甥,它會直接修改當(dāng)前Array的元素位置,直接調(diào)用時哼拔,按照默認順序排序:
vararr = ['B','C','A'];arr.sort();arr;// ['A', 'B', 'C']
能否按照我們自己指定的順序排序呢引有?完全可以,我們將在后面的函數(shù)中講到倦逐。
reverse
reverse()把整個Array的元素給掉個個譬正,也就是反轉(zhuǎn):
vararr = ['one','two','three'];arr.reverse(); arr;// ['three', 'two', 'one']
splice
splice()方法是修改Array的“萬能方法”,它可以從指定的索引開始刪除若干元素檬姥,然后再從該位置添加若干元素:
vararr = ['Microsoft','Apple','Yahoo','AOL','Excite','Oracle'];// 從索引2開始刪除3個元素,然后再添加兩個元素:arr.splice(2,3,'Google','Facebook');// 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']arr;// ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']// 只刪除,不添加:arr.splice(2,2);// ['Google', 'Facebook']arr;// ['Microsoft', 'Apple', 'Oracle']// 只添加,不刪除:arr.splice(2,0,'Google','Facebook');// 返回[],因為沒有刪除任何元素arr;// ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
concat
concat()方法把當(dāng)前的Array和另一個Array連接起來曾我,并返回一個新的Array:
vararr = ['A','B','C'];varadded = arr.concat([1,2,3]);added;// ['A', 'B', 'C', 1, 2, 3]arr;// ['A', 'B', 'C']
請注意,concat()方法并沒有修改當(dāng)前Array健民,而是返回了一個新的Array抒巢。
實際上,concat()方法可以接收任意個元素和Array秉犹,并且自動把Array拆開蛉谜,然后全部添加到新的Array里:
vararr = ['A','B','C'];arr.concat(1,2, [3,4]);// ['A', 'B', 'C', 1, 2, 3, 4]
join
join()方法是一個非常實用的方法,它把當(dāng)前Array的每個元素都用指定的字符串連接起來崇堵,然后返回連接后的字符串:
vararr = ['A','B','C',1,2,3];arr.join('-');// 'A-B-C-1-2-3'
如果Array的元素不是字符串型诚,將自動轉(zhuǎn)換為字符串后再連接。