JavaScriptエンジンの違い

Safari/Firefox/ChromeJavascript Engineが違うこともあり、やっぱり微妙に挙動が違う。

今日ハマったのはこれ。 top。

top というglobal変数は

  • Safariは普通にユーザ定義変数として使える
  • Firefoxではwindowに関するObjectとして使われている。が上書きが可能。
  • Chromeでは空の Object として使われている

Chromeではユーザが自分で var top として定義しても上書きはされず、空のObjectとして常に扱われる。

従って、

var top="hoge";
console.log(top + "blah");

と書くと、

となる。