JavaScript - 文字列の長さを取得(サロゲートペア対策を含む)
JavaScriptで文字列の長さを取得するには、 Stringオブジェクトのlengthプロパティを使います。
「変数名.length」や「文字列リテラル.length」で取得できます。
また、サロゲートペア対策として、 スプレッド演算子(...)を使った文字列の長さを取得する方法も紹介します。
lengthプロパティの使い方
変数名.length
lengthプロパティを使って文字列の長さを取得するには、 次のように、「変数名.length」で取得できます。
str = 'abcde';
str = str.length; // 5
文字列リテラル.length
次のように「文字列リテラル.length」という記述でも取得できます。
console.log('abcde'.length); // 5
console.log('あいうえお'.length); // 5
通常のプログラミングでは、「変数名.length」を使うことの方が多いと思います。
スプレッド演算子+lengthプロパティ
サロゲートペアの問題
サロゲートペアという特殊な文字を含む場合、 文字列の長さはうまく取得できません。
例えば、「𩸽」(ホッケ)の場合、lengthプロパティで長さを取得すると「2」となります。
console.log('𩸽'.length); // 2
console.log('𩸽を食べる'.length); // 6
スプレッド演算子+lengthで解決
サロゲートペアを含んだ問題を解決し、 正しい文字列の長さを取得するには、 スプレッド演算子(...)+lengthプロパティを使います。
スプレッド演算子(...)を使って文字列を配列に分割し、 配列の長さを数えています。
console.log([...'𩸽'].length); // 1
console.log([...'𩸽を食べる'].length); // 5
文字列リテラルではなく、変数を使う場合も同様に記述できます。
str = '𩸽を食べる';
console.log([...str].length); // 5
この方法だと、簡単にサロゲートペアの文字も正しく1文字と認識できます。