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