Javascript テキスト
Number型、BigInt型のつぎはテキストについて、つまりString型について書いていくで。
テキストを表すのがjsでいうとString型やねんな。で16ビット値が順序づけて並べられた不変型のデータです。不変型についてはNumber型でいうたように、関数を使ったとしてもそれ自体が変わるのではなく、新しくそれと同じデータが生成されて計算されるってことや。で、String型もプリミティブ値でオブジェクトのように扱われれば、プリミティブラッパーオブジェクトが生成されて、うんぬんかんぬんってなる。
で、jsってUnicode文字集合のUTF-16エンコーディングをつかってる。日本語とかの基本多言語面の文字(よく使われるUnicode文字)は'a'が1文字として認識されるように'あ'も一文字として認識されるようにできてる。ただ、あんまり使われへんUnicode文字(例:❤︎)とかは二文字として認識されたりするんよな。
これはlengthっていうプロパティを使ったんやけど、jsで定義されてる文字列操作メソッドは、16ビットの値に対して処理を行ってらしいわ。でES6以降は、文字列にたいして反復処理が可能で、この場合は、文字列に対して反復処理が行われるみたい。
で概要はここまでで、文字列をjsではどう書くのかというと「'」とか「"」とかES6以降は「`」でも文字列を囲めるようになったんやと。で「'」と「"」はそん何違いはないというか、強いて言えばシングルクォートはダブルクォートの中に入るくらい。何が言いたいかというとhtmlでのonclick="alert('thank you')"みたいな括弧と中括弧の序列的なものがある。で、バッククォートはその二つと違って文字列の中にjsの式を埋め込めるんやって
こんな感じで。でな、jsって改行を認識しやんって別の記事でも書いたんやけど、jsで改行したいなとか文字列の中に「you're」って書きたいな思った時にその処理をしてくれる特殊な文字がよういされてて、そういうのをエスケープシーケンスっていうやって、エスケープシーケンスに変えるための文字をエスケープ文字って言うんやけど、たとえば「n」だけやとただの「n」なんやけど「\n」ってかくと「\」が「n」の意味を取っ払って改行っていう意味の文字になるっていうやつやねん。でそのついてくる文字の意味を取っ払って別の意味を持たせる文字「\」をエスケープ文字っていうんやと。
で結構エスケープシーケンスって使われるらしいから、どういうふうに書くかだけでも知ってるといいと思う。
ちなみにバッククォートをつかうと\nって記述せんくても改行したら\nをいれてくれるねん。すごない?
ほんでまぁエスケープシーケンスは他にもいっぱいあるから気になったら調べてみてくれ。
で、文字列の操作やねんけどな、文字列も+演算子が使えんねん。-演算子とか*演算子とかつかったらあたいはNaNが帰ってくる。で===とか!==で比較できるし、<とか>でも比較できる。この比較する演算子は16ビットの値に対して行われてる。こういうふうに演算子でも文字列はいじれるし、lengthプロパティのほかにもたくさんあるんで調べてみて。でプロパティとメソッドについて気になって調べたんやけど、プロパティはそのオブジェクトたらしめる属性のことでメソッドは関数とか処理部分のものとかいわれるんやけどいみわからんなっておもって。あんまりしっくりこーへんねんけどこの話はオブジェクトの章で深ぼれたらなとおもう。
次はテンプレートリテラルについて話しますね。
テンプレートリテラル。。ふーんってかんじですよね。あのバッククォートで囲ったやつのことやねんな。こいつは内部で結構おもろい処理されてるぽくって、サイ本に書かれた言葉そのまま書かせていただくと
もう意味わからんけど、上の方で書いたように簡単に言うと文字列のくせしてこの中にjsの式ぶち込めるダークフォースってこと。ここまではまだ、ええねんけどタグ付きテンプレートリテラルっていうのがでてきて吐いたよね。は???????なにそれ。最初のバッククォートのまえに関数名(タグ)をつけると、テンプレートリテラルの中のものが関数に渡されるんやって。関数ようかわらんわ。結構便利みたいやから関数マスターした時にその便利さを実感できればなと思う。