基本類型String和引用類型Array

區分基本類型和引用類型

基本類型值指的是簡單的數據段,而引用類型值指那些可能由多個值構成的對象。
基本類型包含Undefined、Null、Boolean、Number、String,這5種基本數據類型是按值訪問的,由於能夠操做保存在變量中的實際值。
而在操做對象時,其實是在操做對象的引用而不是實際的對象。
爲了方便操做基本類型值,ECMAScript 還提供了 3 個特殊的引用類型:Boolean、NumberString,以便於使用對象方法操做基本類型值,引用類型與基本包裝類型的主要區別就是對象的生存期,基本包裝類型自動建立,並在代碼執行後自動銷燬實例。java

基本類型 String類型

定義:

Sring類型用於表示由零個或多個16位Unicode字符組成的字符序列,即字符串。正則表達式

表示:

字符串能夠由單引號和雙引號組成,二者沒有區別數組

var firstName = 'Nicholas';
var lastName = "Zakas";

字符串的特色:

ECMAScript中的字符串是不可變的。字符串一旦建立,它們的值就沒法改變。要改變某個變量保存的字符串,首先要銷燬原來的字符串,而後在用一個包含新值的字符串來填充該變量。函數

轉化爲字符串:

把一個值轉化爲一個字符串有兩種方式。
第一種使用toString()方法,數值,布爾值,對象,和字符串值 。可是nullundefined值沒有這個方法。this

var age = 11;
age.toString();
var bool = true;
bool.toString();

//能夠傳遞參數,表明輸出數值的基數。
age.toString(2);//11

基本包裝類型 String類型

String類型是字符串的對象包裝,可使用String構造函數來建立。編碼

var stringObject = new String("hello world");​

全部String對象的方法也能夠在全部基本的字符串值中訪問到,其中繼承的value()toLocaleString()toString()方法,都返回對象所表示的基本字符值。url

String類型的方法

(一)字符方法
charAt()charCodeAt(),都接收一個參數,基於0的字符位置。charAt()返回給定位置的字符,charCodeAt()返回字符編碼。
(二)字符串操做方法
concat()方法,接收任意多個參數,返回一個新的字符串,不改變原字符串。可使用+代替。code

var str = "hello";
var res =  str.concat("world")//helloworld
//str仍爲hello

還提供3個基於字符串建立新字符串的方法:
slice(),substr(),substring()。都接收一個或兩個參數。第一個參數指定子字符串的開始位置,而slice(),substring()第二個參數表示字符串到哪裏結束,substr()第二個參數指定返回的個數。都不會修改原字符串。推薦使用slice()對象

var str = "hello world";
str.slice(3);       //"lo world"
str.substring(3);   //"lo world"
str.substr(3);      //"lo world"
str.slice(3,7);     //"lo w"
str.substring(3,7); //"lo w"
str.substr(3,7);    //"lo worl"

(三)字符串位置方法
indexOf()lastindexOf(),兩個方法都是從一個字符串中搜索給定的子字符串,而後返回字符串的位置。若是沒有找到則返回-1。一個從頭開始,另外一個從尾開始。blog

(四)trim()方法
這個方法會建立一個字符串的副本,刪除前置和後綴的空格。不改變原字符。

var str = "  hello   ";
str.trim();//hello

還有非標準的trimLeft(),trimRight(),用於刪除字符串開頭或末尾的空格

(五)字符串的模式匹配方法
1.search()
查找字符串,接受一個參數爲正則表達式或字符串,返回一個與之匹配的子串的起始位置。若未找到返回-1。
例 :javaScript.search(/script/i);//返回4
search屬性不支持全局屬性檢索,因此會忽略修飾符g
2.replace()
用以執行檢索與替換操做,接受兩個參數,第一個參數是正則或字符串,第二個參數是要進行替換的字符串或一個函數,不修改原字符串 。
若第一個參數是字符串,replace()則會直接搜索這個字符串
若是想要替換全部子字符串,惟一辦法就是提供一個正則表達式。並且還要指定(g)標誌。

var text = "cat, bat, sat";
var res = text.replace(/at/g,"ond")
res//"cond, bond, sond"
text//"cat, bat, sat"

3.match()
接受惟一一個參數,就是正則表達式,返回一個由匹配結果組成的數組。
例:「1 plus 2 equal 3」.match(/d+/g/);//返回["1","2","3"]
若是沒有設置修飾符,,就不會進行全局檢索,也會返回一個數組,數組的第一個元素保存匹配的字符串,餘下的元素保存正則表達式中用圓括號括起來的子表達式。
例:解析一個url

var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/-david";
result = text.match(url);
if(result != null){
    var fullurl = result[0];//"http://www.example.com/-david"
    var protocol = result[1];//"http"
    var host = result[2];//"www.examplr.com"
    var path = result[3];//"-david"
}

4.split()
用以將調用它的字符串拆分爲子串組成的數組,使用分隔符是split()的參數,返回一個數組。
參數爲字符串

「123,456,789」.split(","); //返回["123,"456","789"];

參數爲正則

「1,2  3,4 ,5」.split(/\s*,\s*/)//返回["1","2","3","4","5"]

(六)localeCompare()方法
若是字符串在字母表中排在參數前,返回一個負數。
若是相等,則返回0;
若是字符串在字母表中排在參數以後,返回一個正數。

(七)fromCharCode()方法
接收一個或多個字符編碼,返回一個字符串

String.fromCharCode(104,101,101,108,111)//"hello"

引用類型Array

和其餘語言同樣,javaScript中的數組是一個有序列表。但和其餘語言不一樣的是,javaScript數組的每一項能夠保存任何類型的數據。

建立數組

有兩種基本方式,第一種使用Array構造函數,用new建立數組數組(new能夠省略)

var colors = new Array("red","blue","green");

第二種使用字面量建立

var colors = ["red","blue","green"];

棧方法

javaScript爲數組專門提供push()pop()方法,以便實現相似棧的行爲。
push()能夠接收任意數量的參數,把他們添加到數組末尾,返回修改後數組的長度。
pop()方法從數組末尾移除一項,減小數組的length值,返回移除的項。

隊列方法

結合使用shift(),push(),能夠像使用隊列同樣的數組。
同時使用unshift()pop()方法,能夠從相反的方向來模擬隊列。
shift():從數組頭部刪除一個元素,返回被移除的元素。
unshift():從數組頭部添加一個元素,返回數組的長度。

重排序方法

數組中已經存在兩個能夠直接用來重排序的方法:reverse()sort()。

valvalues=[1,2,3,4,5];
values.reverse();
alert(values);//5,4,3,2,1

sort()方法按升序排列數組項,sort()方法能夠接收一個函數做爲參數,修改排序。

function compare(a,b){
    if(a < b){
        return -1;
    }
    else if(a > b){
        return 1
    }
    else{
        return 0;
    }
}
var values = [4,5,1,3,2];
values.sort(compare);
alert(values);//1,2,3,4,5
對於數值型能夠直接寫成
function compare(a,b){
    return a-b;//降序
}

操做方法

concat(),將接收到的參數添加到數組的末尾,返回一個新數組,不修改原數組。

var colors  = ["red","green","blue"];
var colors2 = colors.concat("yellow","red");
alert(colors);//red,green,blue
alert(colors2);//red,green,blue,yellow,red

slice():可以基於當前數組中的一個多項建立一個新數組。slice()方法能夠接收一個或兩個參數,即返回項的起始和結束位置。不會影響原始數組。
splice()方法有不少種用法,始終都是返回一個數組。直接修改原數組

var colors = ["red","green"];
//刪除:指定2個參數:刪除第一項的位置,和刪除的項數,返回刪除的項
 var colors4 = colors.splice(0,2);
 //插入:提供三個參數,起始位置,0(要刪除的項數),要插入的項,返回空數組
 var colors5 = colors.splice(0,0,'1','2');
 //替換:提供3個參數,起始位置,要替換的項數,要插入的項,返回替換的項
 var colors6 = colors.splice(0,2,'red','green');​

位置方法

indexOf()lastIndexOf().兩個方法都接收兩個參數要查找的項和(查找的起始位置)。
在比較第一個參數中的每一項時,會使用全等操做符。

迭代方法

javaScript定義了5個迭代方法。每一個方法都接收兩個參數:要在每一項上運行的函數和(運行該函數對象的做用域——影響this的值)。傳入這些方法的函數會接收三個參數。數組項的值,該項在數組中的位置,數組對象自己。都不會修改數組的值。
every():對數組中的每一項運行給定函數,若是該函數每一項都返回true,則返回true。
filter():對數組中的每一項運行給定函數,返回該函數返回true的項組成的數組。
forEach():對數組中的每一項運行給定函數,沒有返回值。
map():對數組中的每一項運行給定函數,返回每次函數調用結構組成的數組。
some():對數組中的每一項運行給定函數,若是該函數對任意一項返回true,則返回true

var number = [1,2,3,4,5,4,3,2,1];
var everyResult = number.every(function(item,index,array){
    return (item>2);
});
alert(everyResult);//false

var someResult = number.some(function(item,index,array){
    return (item>2);
});
alert(someResult);//true

var filterResult = number.filter(function(item,index,array){
    return item>2;
});
alert(filterResult);//[3, 4, 5, 4, 3]

var mapReuslt = number.map(function(item,index,array){
    return item*2;
});
alert(mapResult);//[2, 4, 6, 8, 10, 8, 6, 4, 2]

var num = [];
var forEachResult = number.forEach(function(item,index,array){
    if(item!=0){
        num += item;
    }
});
alert(num);//"123454321"
alert(forEachResult)//undefined

縮小方法

Reduce()reduceRight(),這兩個方法都會迭代數組的全部項,而後構建一個最終返回的值。reduce()方法從數組的第一項開始,逐個遍歷到最後。reduceRight()則相反.
都接收兩個參數:一個在每一項上調用的函數和(做爲縮小基礎的初始值)。調用的函數接收4個參數:前一值,當前值,項的索引和項的數組。這個函數返回的任何值都會做爲參數返回。

//執行求和操做
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(prev,cur,index,array){
    return prev + cur;
});
相關文章
相關標籤/搜索