タグ:JavaScript の検索結果

JavaScriptの連想配列キーに「default」を使うとSafariで動かない

まさかIEのJavaScriptパーサー以外でトラブる日が来ようとは。

 

JavaScriptで下記のような連想配列を書いていたのですが、

var hoge = {
default: 'ruby',
second: 'JavaScript',

change: function(key) {
hoge[key]
}
}


あのIE6ですらまともに動くのに、何故かSafariでエラー。
Safari4のエラーコンソールで見てみると、どうやら「default: 'ruby', 」の行でエラーになっている模様。

念のため、「JavaScript default」で検索してみると、switch文の中で使うキーワードとして登録されていました。普段Rubyだとswitchもdefaultも使わないから、すっかり忘れてた。
(Rubyだと、「case .. when .. else .. end」)

自戒を込めて、JavaScriptのキーワードと予約語一覧へのリンクを貼っておきますorz
selfとthisもよく間違えるんだよなぁ……。

JavaScriptの仕様的には、Safariとそれ以外のブラウザ、どっちの挙動の方が正しいんだろう。教えてエロい人!

JavaScript, Safari | comments(0) | trackbacks(0)   2009.06.21 Sun 20:55

JavaScriptの正規表現でハマった

JavaScriptで、「.」や「..」に一致する文字列を抽出しようとしたのですが、ハマったのでメモ。

var dot = '..';
var str = 'ab';
// 「..」にはマッチして欲しい => alertが出ないとエラー
if( dot.match(new RegExp('^(\.){1,2}$')) ) alert('success 1');
if( dot.match(new RegExp('^(\\.){1,2}$')) ) alert('success 2');
if( dot.match(new RegExp(/^(\.){1,2}$/)) ) alert('success 3');
if( dot.match(/^(\.){1,2}$/) ) alert('success 4');

// 「ab」にはマッチして欲しくない => alertが出たらエラー
if( str.match(new RegExp('^(\.){1,2}$')) ) alert('error 1'); //=> ここでalertが出てしまう
if( str.match(new RegExp('^(\\.){1,2}$')) ) alert('error 2');
if( str.match(new RegExp(/^(\.){1,2}$/)) ) alert('error 3');
if( str.match(/^(\.){1,2}$/) ) alert('error 4');

 

Firebugのコンソール上で調べたところ、生成されるRegExpオブジェクトは下記の通りになっていた。

new RegExp('^(\.){1,2}$') //=> /^(.){1,2}$/ (.がエスケープされていない)
new RegExp('/^(\\.){1,2}$/') //=> /\/^(.){1,2}$\// (.がエスケープされていない)
new RegExp('^(\\.){1,2}$') //=> /^(\.){1,2}$/ (これは正しい挙動)
new RegExp(/^(\.){1,2}$/) //=> /^(\.){1,2}$/ (これは正しい挙動)

 

new RegExpする際に正規表現を文字列形式で渡すと、シングルクオート/ダブルクオートに関係なく評価された文字列を正規表現として扱う仕組みだったわけだ。
つまり、ハマった原因は自分がRuby脳になってたせい。なんてこったい!

ちなみに、正規表現作成時におけるシングルクオート/ダブルクオートの解釈は、言語別に見ると下記のような感じでした。

続きを見る >>

Ruby, JavaScript, ActionScript, PHP, Python, 正規表現 | comments(1) | trackbacks(1)   2009.04.07 Tue 22:38

 
 

ABOUT ME

tak (Takahito Sezutsu)

コメント、トラックバックはお気軽に!

COMMENTS

  • Versions - Macで使えるGUIベースのSubversionクライアント
    TANIARollins23 (07.23)
  • Rails勉強会@東京第38回 行ってきました
    TamikaTurner (07.04)
  • MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
    tak (06.22)
  • 「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
    tak (06.22)
  • 「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
    ko (06.22)
  • MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
    Mac (05.06)
  • クックパッドの裏側を見てきました
    Taylor30CLEVELAND (03.23)
  • MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
    tak (03.11)
  • MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
    tama (03.11)
  • Mac版ATOK定額制(体験版)を1週間使ってみた
    tak (09.19)
フィードメーター - RED-MOUNT.COM
あわせて読みたいブログパーツ