字符串
string.length獲取長度
string[string.length-1]獲取最后一個(gè)字符stringA.concat(stringB)將B連接到A后面,數(shù)組適用string.indexOf('childString')搜索第一次出現(xiàn)子字符串的位置
返回開始的index,若不存在子字符串,返回-1string.lastIndexOf('childString')搜索最后一次出現(xiàn)子字符串的位置string.slice(startIndex, endIndex)提取子字符串
不包括最后一個(gè)字符
string.slice(3)從3開始到最后一個(gè)字符string.substr(startIndex, length)提取子字符串
string.substr(3)從3開始到最后一個(gè)字符大小寫轉(zhuǎn)換
radData.toLowerCase();
radData.toUpperCase();替換字符
browserType.replace('moz','van');將第一個(gè)參數(shù)內(nèi)容替換為第二個(gè)參數(shù)大寫修正(首字母大寫)
var list = document.querySelector('.output ul');
list.innerHTML = '';
var cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOL'];
for(var i = 0; i < cities.length; i++) {
var input = cities[i];
var lower = input.toLowerCase();//轉(zhuǎn)換為小寫
var firstLetter = lower.slice(0,1);//首字母分離
var capitalized = lower.replace(firstLetter,firstLetter.toUpperCase());//替換首字母
var result = capitalized;
var listItem = document.createElement('li');
listItem.textContent = result;
list.appendChild(listItem);
}
對象
-
var person = {};創(chuàng)建空對象 - 創(chuàng)建語法
var objectName = {
member1Name : member1Value,
member2Name : member2Value,
member3Name : member3Value
}
- 例子:對象的字面量(literal)——手動(dòng)的寫出對象的內(nèi)容來創(chuàng)建一個(gè)對象
var person = {
//對象的屬性(property)
name : ['Bob', 'Smith'], //array
age : 32, //number
gender : 'male', //string
interests : ['music', 'skiing'], //array
//對象的方法(method)
bio : function() {
alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
}, //function
greeting: function() {
alert('Hi! I\'m ' + this.name[0] + '.');
} //function,最后一個(gè)成員后不加逗號(hào)
};
- 訪問
- 點(diǎn)表示法(dot notation)
person.age person.interests[1] person.bio()- 括號(hào)表示法(bracket notation)
括號(hào)表示法一個(gè)有用的地方是它不僅可以動(dòng)態(tài)的去設(shè)置對象成員的值,還可以動(dòng)態(tài)的去設(shè)置成員的名字。person['age'] person['name']['first']
比如說,我們想讓用戶能夠在他們的數(shù)據(jù)里存儲(chǔ)自己定義的值類型,通過兩個(gè)input框來輸入成員的名字和值,通過以下代碼獲取用戶輸入的值:
我們可以這樣把這個(gè)新的成員的名字和值加到person對象里:var myDataName = nameInput.value var myDataValue = nameValue.valueperson[myDataName] = myDataValue - 子命名空間
name : {
first : 'Bob',
last : 'Smith'
},
//訪問時(shí)
person.name.first;
person.name.last;
- 直接創(chuàng)建新成員
person.farewell = function() { alert("Bye everybody!") }
person['eyes'] = 'hazel'
-
排序
對象可以按照某個(gè)屬性排序:var items = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic' }, { name: 'Zeros', value: 37 } ]; // sort by value items.sort(function (a, b) { return (a.value - b.value) }); // sort by name items.sort(function(a, b) { var nameA = a.name.toUpperCase(); // ignore upper and lowercase var nameB = b.name.toUpperCase(); // ignore upper and lowercase if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } // names must be equal return 0; });
數(shù)組
-
常用方法
str.split("-")將字符串轉(zhuǎn)換為數(shù)組,參數(shù)為分隔符
arr.join("-")將數(shù)組用分隔符連接轉(zhuǎn)為字符串
pop()刪除并返回?cái)?shù)組的最后一個(gè)元素
push()向數(shù)組的末尾添加一個(gè)或更多元素,并返回新的長度
reverse()顛倒數(shù)組中元素的順序
shift()刪除并返回?cái)?shù)組的第一個(gè)元素
slice()從某個(gè)已有的數(shù)組返回選定的元素
sort()對數(shù)組的元素進(jìn)行排序
splice()刪除元素,并向數(shù)組添加新元素
toSource()返回該對象的源代碼
toString()把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果
unshift()向數(shù)組的開頭添加一個(gè)或更多元素,并返回新的長度 -
數(shù)組的深拷貝
- for 循環(huán)
- slice 方法
- concat 方法
- ES6擴(kuò)展運(yùn)算符
var arr = [1,2,3,4,5] var [ ...arr2 ] = arr arr[2] = 5 console.log(arr) console.log(arr2) -
排序
arr.sort([compareFunction])- 如果沒有指明 compareFunction ,那么元素會(huì)按照轉(zhuǎn)換為的字符串的諸個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。
- 如果指明了 compareFunction ,那么數(shù)組會(huì)按照調(diào)用該函數(shù)的返回值排序。即 a 和 b 是兩個(gè)將要被比較的元素:
1.如果 compareFunction(a, b) 小于 0 ,那么 a 會(huì)被排列到 b 之前;
2.如果 compareFunction(a, b) 等于 0 , a 和 b 的相對位置不變。備注: ECMAScript 標(biāo)準(zhǔn)并不保證這一行為,而且也不是所有瀏覽器都會(huì)遵守(例如 Mozilla 在 2003 年之前的版本);
3.如果 compareFunction(a, b) 大于 0 , b 會(huì)被排列到 a 之前。
compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果,否則排序的結(jié)果將是不確定的。
例子
function compare(a, b) { if (a < b ) { // 按某種排序標(biāo)準(zhǔn)進(jìn)行比較, a 小于 b return -1; } if (a > b ) { return 1; } // a must be equal to b return 0; }sort方法可以使用 函數(shù)表達(dá)式 方便地書寫var numbers = [4, 2, 5, 1, 3]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers); 也可以寫成: var numbers = [4, 2, 5, 1, 3]; numbers.sort((a, b) => a - b); console.log(numbers); // [1, 2, 3, 4, 5]
隊(duì)列
隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。
又稱為先進(jìn)先出(FIFO—first in first out)線性表-
順序隊(duì)列
建立順序隊(duì)列結(jié)構(gòu)必須為其靜態(tài)分配或動(dòng)態(tài)申請一片連續(xù)的存儲(chǔ)空間,并設(shè)置兩個(gè)指針進(jìn)行管理。一個(gè)是隊(duì)頭指針front,它指向隊(duì)頭元素;另一個(gè)是隊(duì)尾指針rear,它指向下一個(gè)入隊(duì)元素的存儲(chǔ)位置,如下圖:
當(dāng)front=rear時(shí),隊(duì)列中沒有任何元素,稱為空隊(duì)列。 -
循環(huán)隊(duì)列
在實(shí)際使用隊(duì)列時(shí),為了使隊(duì)列空間能重復(fù)使用,往往對隊(duì)列的使用方法稍加改進(jìn):無論插入或刪除,一旦rear指針增1或front指針增1 時(shí)超出了所分配的隊(duì)列空間,就讓它指向這片連續(xù)空間的起始位置。自己真從MaxSize-1增1變到0,可用取余運(yùn)算rear%MaxSize和front%MaxSize來實(shí)現(xiàn)。這實(shí)際上是把隊(duì)列空間想象成一個(gè)環(huán)形空間,環(huán)形空間中的存儲(chǔ)單元循環(huán)使用,用這種方法管理的隊(duì)列也就稱為循環(huán)隊(duì)列。除了一些簡單應(yīng)用之外,真正實(shí)用的隊(duì)列是循環(huán)隊(duì)列。
在循環(huán)隊(duì)列中,當(dāng)隊(duì)列為空時(shí),有front=rear,而當(dāng)所有隊(duì)列空間全占滿時(shí),也有front=rear。為了區(qū)別這兩種情況,規(guī)定循環(huán)隊(duì)列最多只能有MaxSize-1個(gè)隊(duì)列元素,當(dāng)循環(huán)隊(duì)列中只剩下一個(gè)空存儲(chǔ)單元時(shí),隊(duì)列就已經(jīng)滿了。因此,隊(duì)列判空的條件時(shí)front=rear,而隊(duì)列判滿的條件時(shí)front=(rear+1)%MaxSize。隊(duì)空和隊(duì)滿的情況如圖:
棧
棧-百度百科
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進(jìn)先出表。


