天天看點

你不知道的JavaScript(三)字元串

JavaScript字元串很容易被認為本質就是字元數組,ECMAScript規範中字元串作為一種單獨的string類型,它的底層實作可能是數組,也可能是其他資料結構,因不同的JavaScript引擎而異。就像c++語言一樣,c++最新标準為國際化标準組織與2011年釋出,不同的編譯器(例如cl、gcc、g++等)對這套标準的實作都有所不同,甚至有些編譯器還增加了一些個性化的元素。目前主流的JS引擎有SpiderMonkey(Mozilla浏覽器使用的引擎)、V8引擎(Chrome浏覽器引擎)等,這些引擎都是開源的,不僅僅可以用在浏覽器中,一些商業遊戲引擎(如Unity3d)中也有應用。

對于使用JS語言編寫應用的程式員來說,我們屬于使用者,并不需要過多關注JS引擎是如何實作ECMAScript規範的。

正确認識JS字元串并不是字元數組是相當重要的,我們來看一下二者的異同點:

<script type="text/javascript">
        var str = "hello";
        var arr = ['h','e','l','l','o'];
        alert(str.length);//5
        alert(arr.length);//5
        alert(str.indexOf('e'));//1
        alert(arr.indexOf('e'));//1
        str.concat("world");
        arr.concat(['w','o','r','l','d']);
        alert(str[]);//h
        alert(arr[]);//h
    </script>
           

字元串和字元數組都有length屬性,我們可以使用它來擷取字元串(字元數組)的長度。都提供indexOf函數,該函數可以傳回某個字元在字元串(字元數組)中的位置。都可以調用concat和其他字元串(字元數組)進行拼接,都可以使用下标形式擷取字元串(字元數組)中的某一個字元。

接下來介紹兩者不同的地方,

JavaScript字元串長度是不可變的,而字元數組的長度可以任意改變。

str.concat("world");
str += "world"
           

調用concat函數實際上産生了一個新的字元串,str的内容依然沒變。使用+=運算符看上去好像str的長度發生改變,事實上也是産生了一個新的字元串複制給str變量。

<script type="text/javascript">
        var str = "hello";
        var arr = ['h','e','l','l','o'];
        alert(typeof str);//string
        alert(typeof arr);//object
        //str.reverse();//error: reverse is undefined
        arr.reverse();//right
        str += "world";
        arr += ['w','o','r','l','d'];
        alert(str);//helloworld
        alert(arr);//h,e,l,l,ow,o,r,l,d

        var str1 = "1234";
        var arr1 = ['1','2','3','4'];
        alert(+str1);//1234
        alert(+arr1);//NaN
    </script>
           

JS字元串屬于string類型,數組屬于object類型,我們可以調用數組的reverse函數對字元進行反轉,但這個方法在string中未定義。使用+=運算符對字元串和字元數組進行拼接時二者的差異也較大,具體情況請參考上面的代碼。我們可以使用單目運算符正号’+’將字元串隐式轉換成數字,但是字元數組不行,結果為NaN。

上面為二者的異同點,最後介紹一下將字元串轉換成數字的其他方法。

<script type="text/javascript">
        var str = "1234";
        alert(typeof (str - ));//alert number
        alert(typeof parseInt(str));//alert number
    </script>
           

除了上面的正号運算符’+’,我們還可以把字元串和數字0做減法運算或者調用parseInt函數將字元串轉換成數字。

轉載于:https://www.cnblogs.com/lanzhi/p/6468829.html

繼續閱讀