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 の話しのほうが長くなっちゃったな
まあいいや。

Firefoxを瞬殺するたった3文字のブラクラ

(追記)皆様のコメントやブクマでの指摘によると

FireBug + FIrefox2.0 で発生するようです。
ここに落ちなくする設定方法が書いてあります。
http://d.hatena.ne.jp/mhrs/20061030/p1

自己責任でお願いします。

JavaScriptに以下のコードを書く

#1#

信じられない人はURL欄に

javascript:#1#

どうやら

SpiderMonkey のソースに JS_HAS_SHARP_VARS というのがあり、そこらへんで落ちてるっぽい。
この謎の仕様 SHARP_VARS って何なんだろ。有識者の方、教えてください。

SHARP_VARS 続報

どうやら、JavaScriptでは以下のように値を保持することができるようだ。

#1=[1,2,3];
#2={hoge: 'fuga'};

これらを参照するときに

#1#;
#2#;

とするらしいのだが、これがブラウザを落としてしまう。