var s = '河南省,鄭州市';
console.log(s.indexOf('鄭州市')); // 返回7
console.log(s.indexOf('北京')); // 沒有找到指定的子串,返回-1
var s = 'hello,world';
console.log(s.substring(0, 5)); // 從索引0開始到5(不包括5),返回'hello'
console.log(s.substring(7)); // 從索引7開始到結束,返回'world'
console.log(s.substr(2)); //截取2個長度,從1開始,返回截取後的字符串
console.log(s.sub()); //把當前字符串顯示爲下標
console.log(s.sup()); //把當前字符串顯示爲上標
//對象操作
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
//數組操作
var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6; //直接改變數組長度,超出實際長度後,超出數組長度的成員會以空顯示,表現爲undefined
console.log(arr[4]); // arr變爲[1, 2, 3, , ,]
var arr = [10, 20, '30', 'xyz'];
console.log(arr.indexOf(10)); // 元素10的索引爲0
console.log(arr.indexOf(20)); // 元素20的索引爲1
console.log(arr.indexOf(30)); // 元素30沒有找到,返回-1
console.log(arr.indexOf('30')); // 元素'30'的索引爲2
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
console.log(arr.slice(0, 3)); // 從索引0開始,到索引3結束,但不包括索引3: ['A', 'B', 'C']
console.log(arr.slice(3)); // 從索引3開始到結束: ['D', 'E', 'F', 'G']
//slice()就是對應String的substring()版本,它截取Array的部分元素,然後返回一個新的Array:
//注意到slice()的起止參數包括開始索引,不包括結束索引
//如果不給slice()傳遞任何參數,它就會從頭到尾截取所有元素。利用這一點,我們可以很容易地複製一個Array:
var arr = [1, 2];
console.log(arr.push('A', 'B')); // 返回Array新的長度: 4
console.log(arr); // [1, 2, 'A', 'B']
arr.pop(); // pop()返回'B' 把Array的最後一個元素刪除掉
arr; // [1, 2, 'A']
//push()向Array的末尾添加若干元素,pop()則把Array的最後一個元素刪除掉,
//如果要往Array的頭部添加若干元素,使用unshift()方法,shift()方法則把Array的第一個元素刪掉:,空數組繼續pop不會報錯,而是返回undefined
var arr = ['Bafg', 'Car', 'Aed']; //按照默認順序排序
console.log(arr.sort());
//reverse() 把整個Array的元素給掉個個, 也就是反轉:
var arr = ['one', 'two', 'three'];
arr.reverse();
//reverse() 把整個array的元素反轉一下.從頭到尾調換位置
//splice()方法是修改Array的“萬能方法”,它可以從指定的索引開始刪除若干元素,然後再從該位置添加若干元素:
var arr = ['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()方法把當前的Array和另一個Array連接起來,並返回一個新的Array:
var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']
//請注意,concat()方法並沒有修改當前Array,而是返回了一個新的Array。
//實際上,concat()方法可以接收任意個元素和Array,並且自動把Array拆開,然後全部添加到新的Array裏:
var arr = ['A', 'B', 'C'];
var s = arr.concat(1, 2, [3, 4, [11, 22],
[33, 44]
]); // ["A", "B", "C", 1, 2, 3, 4, Array[2], Array[2]]
console.log(s);
//join 當前Array的每個元素都用指定的字符串連接起來,然後返回連接後的字符串:
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
if ('name' in xiaoming) { //要檢測xiaoming是否擁有某一屬性,可以用in操作符
console.log('name' in xiaoming)
}
//如果in判斷一個屬性存在,這個屬性不一定是xiaoming的,它可能是xiaoming繼承得到的:
console.log('toString' in xiaoming);
//因爲toString定義在object對象中
//要判斷一個屬性是否是xiaoming自身擁有的,而不是繼承得到的,可以用hasOwnProperty()方法:
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
//Map和Set
//JavaScript的默認對象表示方式{}可以視爲其他語言中的Map或Dictionary的數據結構,即一組鍵值對。
//但是JavaScript的對象有個小問題,就是鍵必須是字符串。但實際上Number或者其他數據類型作爲鍵也是非常合理的。
//爲了解決這個問題,最新的ES6規範引入了新的數據類型Map
var m = new Map();
var s = new Set();
console.log(s);
//Map
//Map是一組鍵值對的結構,具有較高的查找效率
//舉個例子,假設要根據同學的名字查找對應的成績,如果用Array實現,需要兩個Array:
var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];
//給定一個名字,要查找對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,Array越長,耗時越長。
//如果用Map實現,只需要一個“名字”-“成績”的對照表,直接根據名字查找成績,無論這個表有多大,查找速度都不會變慢。用JavaScript寫一個Map如下:
var mp = new Map([
[xiaoming, '95'],
['xiaot', '905'],
['daniu', 96],
['xiaopang', '100'],
['xiao', 950]
]);
var mp1 = new Map([
[xiaoming, '95'],
[xiaot, '905'],
['daniu', 96],
['xiaopang', '100'],
['xiao', 950]
]);
//Uncaught ReferenceError: xiaot is not defined at.....
//注意:仔細對比mp和mp1的鍵值,可知在一個Map裏,只能出現一個鍵爲不帶''的,如果出現一個以上會報錯,爲了規範,定義Map的時候,所有的鍵和值都要用''
console.log(mp.get('xiaot')); // 95
//初始化Map需要一個二維數組,或者直接初始化一個空Map。Map具有以下方法:
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined
//Set
//Set和Map類似,也是一組key的集合,但不存儲value。由於key不能重複,所以,在Set中,沒有重複的key。
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']); //重複元素在Set中自動被過濾:
s; // Set {1, 2, 3, "3"}
//通過add(key)方法可以添加元素到Set中,可以重複添加,但不會有效果
//通過delete(key)方法可以刪除元素:
var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}