TypeScript里string和String的區(qū)別
摘要:通常來說,string表示原生類型,而String表示對象。
背景
與JavaScript
語言不同的是,TypeScript使用的是靜態(tài)類型,比如說它指定了變量可以保存的數(shù)據(jù)類型。如下圖所示,如果在JS中,指定變量可以保存的數(shù)據(jù)類型,會報錯:“類型注釋只可以在TS文件中被使用”:
TypeScript是JavaScript
的超集(superset
),TypeScript
需要編譯(語法轉換)生成JavaScript才能被瀏覽器執(zhí)行,它也區(qū)分了string和String這兩個數(shù)據(jù)類型。通常來說,string表示原生類型,而String表示對象。
1、原生string
JavaScript
在ES6標準里支持6種原生類型(number),string是其中之一。
原生的string是不包含屬性的值(即沒有properties),包括字面上沒有定義類型、字面上定義了string、字面上定義了String和一些從string函數(shù)調用返回的strings也都可以被歸為原生類型:
以上三個變量的類型(typeof())是string
。
2、對象String
對象是不同屬性的累積,一個對象可以調用許多相應的方法。
let msg3: String = new String('Hello world!');
這個變量msg3的類型就是object:
console.log(typeof(msg3)); // object
String對象支持的方法:
3、代碼對比
我們對下面4個變量進行類型的探索與比較:
let msg: string = 'Hello world!'; let msg2: String = 'Hello world!'; let msg22 = 'Hello world!'; //字面上沒有定義類型 let msg3: String = new String('Hello world!'); console.log(typeof(msg)); //string console.log(typeof(msg2)); //string console.log(typeof(msg22)); //string console.log(typeof(msg3)); //object console.log(msg === msg2); //true console.log(msg === msg3); //false console.log(msg2 === msg3); //false
4、為什么需要String對象
首先,當我們使用關鍵字new新建一個String對象的時候,TS會創(chuàng)建一個新的對象;即我們用new新建了兩個String對象,即使內容相同,它們也是指向不同的內存。
舉下面兩個栗子:
1.當用a1,b1代表相同值的兩個變量的時候,它們是相同的;而當用new新建兩個對象的時候,即使值相同,它們也是不同的(下圖會輸出false, true):
2.eval()函數(shù)的作用:用來計算表達式的值。如果我們把eval()直接賦給string,而string里面是計算式的字符串,那么它會返回計算后的值;而如果我們把eval()賦給String,因為它不是原生類型,它只會返回String
這個對象(下圖會輸出27, :"8 + 20", 28):
其次,因為String對象可以有屬性。我們可以用String對象在屬性里保留一個額外的值。即使這個用法并不常見,但是仍然是TS的一個特性:
var prim = 'hello HW'; var obj = new String('hello HW Cloud'); prim.property = 'PaaS'; // Invalid obj.property = 'PaaS'; // Valid console.log(obj.property); //輸出為PaaS
4、兩者區(qū)別總結
到此這篇關于TypeScript里string和String的區(qū)別的文章就介紹到這了,更多相關TypeScript里string和String內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用JavaScript將普通數(shù)字轉換為帶有千分位分隔符格式的多種實現(xiàn)方法
如何利用 JavaScript 將普通數(shù)字轉換為帶有千分位分隔符的格式,我們將介紹多種方法,包括使用內置的 toLocaleString() 方法、Intl.NumberFormat 對象以及自定義函數(shù)來實現(xiàn)數(shù)字格式化,需要的朋友可以參考下2023-12-12本地Bootstrap文件字體圖標引入?yún)s無法顯示問題的解決方法
這篇文章主要為大家詳細介紹了本地Bootstrap文件字體圖標引入?yún)s無法顯示問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12js實現(xiàn)雙向鏈表互聯(lián)網(wǎng)機頂盒實戰(zhàn)應用實現(xiàn)
js實現(xiàn)雙向鏈表互聯(lián)網(wǎng)機頂盒實戰(zhàn)應用實現(xiàn),需要的朋友可以參考下。2011-10-10使用Javascript和DOM Interfaces來處理HTML
使用Javascript和DOM Interfaces來處理HTML...2006-10-10JS獲取浮動(float)元素的style.left值為空的快速解決辦法
這篇文章主要介紹了JS獲取浮動(float)元素的style.left值為空的快速解決辦法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02