ES 6の文字列の使用方法の拡張
文字のユニック表記法
JavaScriptは、「xxxxx」という形式で文字を表すことができます。ここで、「xxxx」は文字の符号点を表します。
ES 6はこの点を改善しました。大きな括弧に入れると、その文字を正しく解読することができます。
以下のコードでは、最後の例は、大かっこ表現法が4バイトのUTF-16符号化と等価であることを示している。
ES 6は、4バイトの格納された文字を正確に処理し、1文字の符号点を返すcodePointAt方法を提供する。
codePointAtメソッドは、符号点の10進数の値を返します。16進数の値が欲しいなら、tostringメソッドを使って変換してもいいです。
ES 5は、String.from CharCode方法を提供し、コードポイントから対応文字を返すが、この方法では32ビットのUTF-16文字を識別できない。
以下のコードの中で、String.from CharCodeは0 xFFFFより大きいコードポイントを識別できないため、0 x 20 BB 7にオーバーフローが発生し、最上位2は捨てられました。最後にコードポイントU+0 BB 7に対応する文字ではなく、コードポイントU+20 BB 7に対応する文字を返します。
なお、from CodePoint方法はStringオブジェクトに定義され、codePointAt法は文字列のインスタンスオブジェクトに定義される。
文字列のエルゴーバーインターフェース
ES 6は文字列にエルゴードインターフェースを追加しています。
現在、ES 6には、文字列の例を示すat方法が提案されており、Unicode番号が0 xFFFFより大きい文字を識別し、正しい文字を返すことができます。
多くのヨーロッパ語にはアクセント記号とアクセント記号があります。それらを表現するために、ユニックodeは2つの方法を提供します。一つは、アクセント付き記号を直接提供する文字です。Ǒ(\u 01 D 1)もう一つは、合成記号(cobining character)、すなわち元の文字とアクセント記号の合成を提供し、2つの文字はO(\u 004 F)およびˇ(\u 030 C合成Ǒ(\u 004 F\u 030 C)
この2つの表現方法は視覚と意味の両方において等価であるが、JavaScriptは識別できない。
ES 6は文字列の例のnormalize()方法を提供し、文字の異なる表現方法を同じ形式に統一することをユニック正規化と呼ぶ。 NFCは、デフォルトのパラメータで、「標準等価合成」を表し、複数のシンプルな文字の合成文字を返します。標準等価とは視覚と意味上の等価をいう。 NFDは、「標準等価分解」(Normalzation Form Canonical Decompossition)を表し、つまり、標準等価の前提の下で、合成文字分解の複数の単純文字を返す。 NFKCは、「互換等価合成」を表し、合成文字を返します。「互換等価」とは意味的に等価なものをいうが、視覚的には同等ではない。例えば、「フレームベーキングテング蚕病薄い#庵皇怯美淳伦、normalize方法は中国語を識別できない。」 NFKDは、「互換等価分解」(Normalzation Form Comptibility Decompossition)を表し、すなわち、等価互換性を前提に合成文字分解の複数の単純文字を返します。 以下のコードは、NFCパラメータが文字の合成形式に戻り、NFCパラメータが文字の分解形式に戻ります。
ただし、normalizeメソッドでは現在、3つ以上の文字の合成は認識できません。この場合、やはり正規表現だけを使用して、ユニックコード区間で判断します。
従来、JavaScriptはindexOf方法だけであり、他の文字列に文字列が含まれているかどうかを判定するために使用されてもよい。ES 6はまた3つの新しい方法を提供します。 includes():ブール値を返します。パラメータ文字列が見つかったかどうかを表します。 starts With():ブール値を返し、パラメータ文字列がソース文字列の先頭にあるかどうかを示します。 endsWith():ブール値を返し、パラメータ文字列がソース文字列の末尾にあるかどうかを表します。
次のコードは、第2のパラメータnを使用すると、endsWithの挙動が他の2つの方法と異なることを示しています。前のn文字に対して、他の2つの方法はn番目の位置から文字列が終わるまでです。
repeatメソッドは新しい文字列を返し、元の文字列をn回繰り返すことを表します。
パラメータが小数なら、整数になります。
repeatのパラメータが負かInfinityなら、エラーが発生します。
ES 7は文字列補完の機能を提供します。指定された長さの文字列が足りない場合、頭または尾に補完されます。padStartは頭の補完に使います。padEndは後尾の補完に使います。
テンプレート文字列
テンプレート文字列(template string)は拡張版の文字列で、逆引用符(`)で表示されます。普通の文字列として使用できます。また、複数行の文字列を定義したり、文字列に変数を埋め込んだりできます。
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。
JavaScriptは、「xxxxx」という形式で文字を表すことができます。ここで、「xxxx」は文字の符号点を表します。
"\u0061"
// "a"
ただし、この表現は\u 0000-\uFFFF間の文字に限定されます。この範囲を超えた文字は、二重バイトで表現しなければなりません。
"\uD842\uDFB7"
// " "
"\u20BB7"
// " 7"
上のコードは、\uの後ろに直接0 xFFFFを超える数値(例えば\u 20 BB 7)をフォローすれば、JavaScriptは\u 20 BB+7と理解されます。B 20 BBは印刷不可文字ですので、スペースが一つしか表示されません。あとは7つ付いてきます。ES 6はこの点を改善しました。大きな括弧に入れると、その文字を正しく解読することができます。
以下のコードでは、最後の例は、大かっこ表現法が4バイトのUTF-16符号化と等価であることを示している。
"\u{20BB7}"
// " "
"\u{41}\u{42}\u{43}"
// "ABC"
let hello = 123;
hell\u{6F} // 123
'\u{1F680}' === '\uD83D\uDE80'
// true
上記の表示法があると、JavaScriptは六つの方法で一つの文字を表すことができます。
'\z' === 'z' // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true
codePointAt()ES 6は、4バイトの格納された文字を正確に処理し、1文字の符号点を返すcodePointAt方法を提供する。
var s = ' a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
codePointAtメソッドのパラメータは、文字列内の位置(0から開始)です。上のコードの中で、JavaScriptは「?a」を3つの文字として扱い、codePointAt方法は最初の文字で「?」を正しく認識して、その10進数符号点134071(すなわち16進数の20 BB 7)を返します。2番目の文字(すなわち「?」の後の2バイト)と3番目の文字「a」では、codePointAtメソッドの結果は、charCodeAtメソッドと同じである。codePointAtメソッドは、符号点の10進数の値を返します。16進数の値が欲しいなら、tostringメソッドを使って変換してもいいです。
var s = ' a';
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"
実際のcodePointAt法のパラメータは、依然として不正です。上のコードでは、文字aは文字列sの正確な位置番号で1であるべきですが、codePointAtメソッドに2を入力しなければなりません。この問題を解決する一つの方法はfor...ofループを使用することで、32ビットのUTF-16文字を正しく認識することができるからです。
var s = ' a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61
String.from CodePoint()ES 5は、String.from CharCode方法を提供し、コードポイントから対応文字を返すが、この方法では32ビットのUTF-16文字を識別できない。
以下のコードの中で、String.from CharCodeは0 xFFFFより大きいコードポイントを識別できないため、0 x 20 BB 7にオーバーフローが発生し、最上位2は捨てられました。最後にコードポイントU+0 BB 7に対応する文字ではなく、コードポイントU+20 BB 7に対応する文字を返します。
String.fromCharCode(0x20BB7)
// "ஷ"
ES 6は、String.from CodePoint方法を提供し、0 xFFFFの文字を認識し、String.from CharCodeの方法の不足を補っています。役割は、ちょうどcodePointAt法と反対です。
String.fromCodePoint(0x20BB7)
// " "
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true
上記のコードでは、String.from CodePoint方法に複数のパラメータがある場合、それらは1つの文字列にまとめて返されます。なお、from CodePoint方法はStringオブジェクトに定義され、codePointAt法は文字列のインスタンスオブジェクトに定義される。
文字列のエルゴーバーインターフェース
ES 6は文字列にエルゴードインターフェースを追加しています。
for (let codePoint of 'foo') {
console.log(codePoint)
}
// "f"
// "o"
// "o"
at()現在、ES 6には、文字列の例を示すat方法が提案されており、Unicode番号が0 xFFFFより大きい文字を識別し、正しい文字を返すことができます。
'abc'.at(0) // "a"
' '.at(0) // " "
normalize()多くのヨーロッパ語にはアクセント記号とアクセント記号があります。それらを表現するために、ユニックodeは2つの方法を提供します。一つは、アクセント付き記号を直接提供する文字です。Ǒ(\u 01 D 1)もう一つは、合成記号(cobining character)、すなわち元の文字とアクセント記号の合成を提供し、2つの文字はO(\u 004 F)およびˇ(\u 030 C合成Ǒ(\u 004 F\u 030 C)
この2つの表現方法は視覚と意味の両方において等価であるが、JavaScriptは識別できない。
'\u01D1'==='\u004F\u030C' //false
'\u01D1'.length // 1
'\u004F\u030C'.length // 2
上のコードは、JavaScriptが合成文字を2つの文字と見なし、2つの表現方法が等しくないことを示しています。ES 6は文字列の例のnormalize()方法を提供し、文字の異なる表現方法を同じ形式に統一することをユニック正規化と呼ぶ。
'\u01D1'.normalize() === '\u004F\u030C'.normalize()
// true
normalize方法は一つのパラメータを受け入れてnormalizeを指定する方式ができます。パラメータの四つのオプション値は以下の通りです。ただし、normalizeメソッドでは現在、3つ以上の文字の合成は認識できません。この場合、やはり正規表現だけを使用して、ユニックコード区間で判断します。
'\u004F\u030C'.normalize('NFC').length // 1
'\u004F\u030C'.normalize('NFD').length // 2
includes()、starts With()、ends With()従来、JavaScriptはindexOf方法だけであり、他の文字列に文字列が含まれているかどうかを判定するために使用されてもよい。ES 6はまた3つの新しい方法を提供します。
var s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true
これらの3つの方法はいずれも第2のパラメータをサポートし、検索を開始する位置を表しています。次のコードは、第2のパラメータnを使用すると、endsWithの挙動が他の2つの方法と異なることを示しています。前のn文字に対して、他の2つの方法はn番目の位置から文字列が終わるまでです。
var s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
repeat()repeatメソッドは新しい文字列を返し、元の文字列をn回繰り返すことを表します。
パラメータが小数なら、整数になります。
repeatのパラメータが負かInfinityなら、エラーが発生します。
'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
'na'.repeat(2.9) // "nana"
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError
padStart()、padEnd()ES 7は文字列補完の機能を提供します。指定された長さの文字列が足りない場合、頭または尾に補完されます。padStartは頭の補完に使います。padEndは後尾の補完に使います。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
上のコードの中で、padStartとpadEndは全部で二つのパラメータを受け入れます。最初のパラメータは文字列の最小長さを指定します。二つ目のパラメータは補完する文字列です。テンプレート文字列
テンプレート文字列(template string)は拡張版の文字列で、逆引用符(`)で表示されます。普通の文字列として使用できます。また、複数行の文字列を定義したり、文字列に変数を埋め込んだりできます。
$('#result').append(`
There are <b>${basket.count}</b> items
in your basket, <em>${basket.onSale}</em>
are on sale!
`);
締め括りをつける以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。