TypeScript里string和String的區(qū)別
摘要:通常來說,string表示原生類型,而String表示對象。
背景
與JavaScript語言不同的是,TypeScript使用的是靜態(tài)類型,比如說它指定了變量可以保存的數(shù)據(jù)類型。如下圖所示,如果在JS中,指定變量可以保存的數(shù)據(jù)類型,會報(bào)錯(cuò):“類型注釋只可以在TS文件中被使用”:

TypeScript是JavaScript的超集(superset),TypeScript需要編譯(語法轉(zhuǎn)換)生成JavaScript才能被瀏覽器執(zhí)行,它也區(qū)分了string和String這兩個(gè)數(shù)據(jù)類型。通常來說,string表示原生類型,而String表示對象。
1、原生string
JavaScript在ES6標(biāo)準(zhǔn)里支持6種原生類型(number),string是其中之一。

原生的string是不包含屬性的值(即沒有properties),包括字面上沒有定義類型、字面上定義了string、字面上定義了String和一些從string函數(shù)調(diào)用返回的strings也都可以被歸為原生類型:

以上三個(gè)變量的類型(typeof())是string。
2、對象String
對象是不同屬性的累積,一個(gè)對象可以調(diào)用許多相應(yīng)的方法。
let msg3: String = new String('Hello world!');這個(gè)變量msg3的類型就是object:
console.log(typeof(msg3)); // object
String對象支持的方法:



3、代碼對比
我們對下面4個(gè)變量進(jìn)行類型的探索與比較:
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); //false4、為什么需要String對象
首先,當(dāng)我們使用關(guān)鍵字new新建一個(gè)String對象的時(shí)候,TS會創(chuàng)建一個(gè)新的對象;即我們用new新建了兩個(gè)String對象,即使內(nèi)容相同,它們也是指向不同的內(nèi)存。
舉下面兩個(gè)栗子:
1.當(dāng)用a1,b1代表相同值的兩個(gè)變量的時(shí)候,它們是相同的;而當(dāng)用new新建兩個(gè)對象的時(shí)候,即使值相同,它們也是不同的(下圖會輸出false, true):

2.eval()函數(shù)的作用:用來計(jì)算表達(dá)式的值。如果我們把eval()直接賦給string,而string里面是計(jì)算式的字符串,那么它會返回計(jì)算后的值;而如果我們把eval()賦給String,因?yàn)樗皇窃愋?,它只會返?code>String這個(gè)對象(下圖會輸出27, :"8 + 20", 28):

其次,因?yàn)镾tring對象可以有屬性。我們可以用String對象在屬性里保留一個(gè)額外的值。即使這個(gè)用法并不常見,但是仍然是TS的一個(gè)特性:
var prim = 'hello HW';
var obj = new String('hello HW Cloud');
prim.property = 'PaaS'; // Invalid
obj.property = 'PaaS'; // Valid
console.log(obj.property); //輸出為PaaS4、兩者區(qū)別總結(jié)

到此這篇關(guān)于TypeScript里string和String的區(qū)別的文章就介紹到這了,更多相關(guān)TypeScript里string和String內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法示例
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法,簡單介紹了雙向鏈表的原理,并結(jié)合實(shí)例形式分析了雙向鏈表的定義與使用方法,需要的朋友可以參考下2017-10-10
由document.body和document.documentElement想到的
不知道大家對這個(gè)標(biāo)題有沒有想法,反正此前我一直把他們混為了一談。其實(shí)不然,首先需有個(gè)“標(biāo)準(zhǔn)”的概念。2009-04-04
showModalDialog 和 showModelessDialog
showModalDialog 和 showModelessDialog...2007-01-01
利用javascript如何隨機(jī)生成一定位數(shù)的密碼
這篇文章主要給大家介紹了關(guān)于利用javascript如何隨機(jī)生成一定位數(shù)的密碼的相關(guān)資料,文中給出了詳細(xì)的示例代碼,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
input file上傳 圖片預(yù)覽功能實(shí)例代碼
input file上傳圖片預(yù)覽其實(shí)很簡單。今天小編就通過本文給大家介紹input file上傳 圖片預(yù)覽功能的實(shí)現(xiàn)代碼,比較簡單,對input file 上傳預(yù)覽功能感興趣的朋友參考下吧2016-10-10
JavaScript引用類型之基本包裝類型實(shí)例分析【Boolean、Number和String】
這篇文章主要介紹了JavaScript引用類型之基本包裝類型,結(jié)合實(shí)例形式分析了javascript中Boolean、Number和String三種基本包裝類型的基本用法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08

