javascript數組、對象、Map和Set

          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}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章