TypeScriptの文字列と文字列は実際には大文字と小文字の違いだけではありません

この記事は、Huaweiクラウドコミュニティ「TypeScriptでの文字列と文字列の違い」、作成者:gentle_zhouから共有されています。

バックグラウンド

JavaScript言語とは異なり、TypeScriptは静的型付けを使用します。つまり、変数が保持できるデータの型を指定します。次の図に示すように、変数がJSに保存できるデータ型を指定すると、「型注釈はTSファイルでのみ使用できます」というエラーが報告されます。

image.png

TypeScriptはJavaScriptのスーパーセットです。ブラウザで実行する前に、JavaScriptを生成するためにTypeScriptをコンパイル(構文変換)する必要があります。また、stringとStringの2つのデータ型を区別します。一般に、文字列はプリミティブ型を表し、文字列はオブジェクトを表します。

原生string

JavaScriptはES6標準で6つのプリミティブ型(数値)をサポートしており、文字列はその1つです。

image.png

ネイティブ文字列は、文字通り型が定義されていない、リテラルが定義された文字列、文字列が定義された文字列など、プロパティを含まない(つまり、プロパティがない)値です。文字列関数呼び出しから返される文字列の一部は、プリミティブ型として分類することもできます。

image.png

上記の3つの変数の型()typeof()は文字列です。

オブジェクト文字列

オブジェクトはさまざまなプロパティの蓄積であり、1つのオブジェクトで多くの対応するメソッドを呼び出すことができます。let msg3: String = new String('Hello world!');

この変数msg3のタイプはオブジェクトです。console.log(typeof(msg3)); // object

Stringオブジェクトでサポートされるメソッド:

image.png image.png image.png

コード比較

次の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
复制代码

なぜStringオブジェクトが必要なのですか

まず、キーワードnewを使用して新しいStringオブジェクトを作成すると、TSは新しいオブジェクトを作成します。つまり、newを使用して2つの新しいStringオブジェクトを作成し、内容が同じであっても、それらは異なるメモリを指します。

次の2つの栗を取ります。

1. a1とb1を使用して同じ値の2つの変数を表す場合、それらは同じです。新しい2つのオブジェクトを新しいもので作成すると、値が同じであっても、それらは異なります(次の図は出力false, true):

image.png

2. eval()関数の役割:式の値を計算するために使用されます。eval()をstringに直接割り当て、stringが計算された文字列である場合、計算された値を返します。eval()をStringに割り当てると、プリミティブ型ではないため、Stringオブジェクトのみが返されます。 (次の図が出力されます27, :"8 + 20", 28):

image.png

次に、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
复制代码

2つの違いの要約

文字列プリミティブ型 文字列オブジェクト
広く使われています めったに使われません
値を保持するだけ 値に加えてプロパティを保持する機能
値は不変であるため、スレッドセーフです 文字列オブジェクトは変更可能
道はない 文字列オブジェクトにはさまざまなメソッドがあります
同じリテラル値で2つの別々の文字列を作成することはできません new2つのオブジェクトを作成できます
ネイティブデータ型です プリミティブデータ型をラップしてオブジェクトを作成します
渡される値は、ネイティブデータ自体のコピーです 渡される値は実際のデータへの参照です
eval()関数を使用すると、ソースコードとして直接処理されます eval()関数を使用すると、文字列に変換されます

参照リンク

  1. www.geeksforgeeks.org/what-is-the…
  2. www.geeksforgeeks.org/variables-d…
  3. www.tutorialspoint.com/typescript/…

[フォロー]をクリックして、HUAWEI CLOUDの新技術について初めて学びましょう〜

おすすめ

転載: juejin.im/post/7078485459944357925