じょりじょり日記

JavaScript100サイトチャレンジを記録するブログです。

JavaScriptチャレンジ2日目

さてさて、基礎的な文法も架橋に差し掛かってまいりました。

プログラミング言語の文法を学習していて強く思うのは、どの言語も心底似ているなぁとシミジミ思います。


ちょっと健忘録。
通常、Unicode(UTF-8)は、日本語を含め、2バイトで表現されているのですが、日本語は漢字が多く、2バイトで表現できる文字数が6万5千ちょっとしかないため、割当からあぶれてしまった文字くんがいます。


表現できなくては困ってしまうので、1文字を4バイト換算して、文字数を拡張するようになったみたいです。
これをサロゲートペアというのです。


ふむふむ、2バイト文字と4バイト文字だと具体的には何か困ることがあるのでしょうか?

var str = "𩸽うまい"; 
var num = str.length;
console.log(num);
// 5


ホッケという漢字が、サロゲートペア文字列なので4バイトで表現されています。
lengthメソッドは2バイトごとに1増加するので、𩸽1文字で2増加してしまっています。
正しく文字数を取得したい時には不便そうですね。


解決策としては、下記のようにして、サロゲートペアをUnicodeで登録されている16進数の値から見つけ出して、全体から引いてあげれば、正しい文字数を取得することが出来るようです。

var str = "𩸽うまい";
var num = str.length;
var sum = str.split(/[uD800-\uDBFF][\uDC00-\uDFFF]/g).length - 1;
console.log(str.length - sum);
// 4


本日のJavaScriptチャレンジはDOMオブジェクトを使って、HTMLからid要素を取得して、組み込みオブジェクトのDateを使用して、現在時刻の取得を実装してみました。まだまだ、基礎的なところを抜け出せておらず、ショボい作品ですが、どんどん成長していきたいとおもいます(^o^)

See the Pen js 2/100 by zyory (@zyoryzyory) on CodePen.