IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

JavaScript は変数名に直接 Unicode Escape が書ける

知ってました?

var \u5929\u91CE = 'amachang';
alert(天野); // amachang
var \u0068\u006f\u0067\u0065 = 'ほげ';
alert(hoge); // ほげ

ついでに今回作ったエスケープ関数置いておきます。(Firefox Only)

var unicodeEscape = function (s) {
  var d = '';
  Array.prototype.forEach.call(s, function(c) {
    var s = c.charCodeAt().toString(16);
    d += '\\u';
    for(var l = s.length; l < 4; l++) d += '0';
    d += s;
  });
  return d;
};

上の unicodeEscape 関数作ってて発見したんだけど

配列の forEach って文字列にも使えるみたい。
こんな感じ

Array.prototype.forEach.call('わーわー!', alert);

というか

数値のプロパティと length プロパティがあると使えるのか

Array.prototype.forEach.call({0: 0, 1:1, length:1}, alert); // 0
Array.prototype.forEach.call({0: 0, 1:1, length:2}, alert); // 0,1
Array.prototype.forEach.call({0: 0, 1:1, length:3}, alert); // 0,1
Array.prototype.forEach.call({0: 0, 2:2, length:3}, alert); // 0,2

この実験から、まず length プロパティの値を見て length の数だけ数値のプロパティを走査し、要素があれば関数を呼び出すという挙動らしい。
また、仕様書嫁とか言われそうだけど。

あれ?

Unicode Escape の話しより、forEach の話しのほうが長くなっちゃったな
まあいいや。