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
どうやら
SpiderMonkey のソースに JS_HAS_SHARP_VARS というのがあり、そこらへんで落ちてるっぽい。
この謎の仕様 SHARP_VARS って何なんだろ。有識者の方、教えてください。
SHARP_VARS 続報
どうやら、JavaScriptでは以下のように値を保持することができるようだ。
#1=[1,2,3]; #2={hoge: 'fuga'};
これらを参照するときに
#1#; #2#;
とするらしいのだが、これがブラウザを落としてしまう。