Firefox 20 から for-each 構文がコンテンツ上で事実上の死
for each構文はE4Xの構文とはいえ、JavaScript 1.6から定義されたものなので、バージョン1.6以上を指定したもの以外は実行できなくしようというもの。
791343 -disable for-each statement on javascript.options.xml.{content|chrome} = falseでfor-eachを消し去ろうとしたボクの案は却下され、段階的にやっていくのが採用された感じ。
エラー文が"missing ( after for"とイマイチ気に入らない感じだけど、いいことですね。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>forEach test</title> </head> <body></body> <script> try { var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("non-version"); } catch(e) { console.error("non-version", e.message); } </script> <script type="text/javascript;version=1.5"> try{ var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("version", "1.5"); } catch (e) { console.error("1.5", e.message); } </script> <script type="text/javascript;version=1.6"> try{ var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("version", "1.6"); } catch (e) { console.error("1,6", e); } </script> <script type="text/javascript;version=1.7"> try{ var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("version", "1.7"); } catch (e) { console.error(e); } </script> <script type="text/javascript;version=1.8"> try{ var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("version", "1.8"); } catch (e) { console.error(e); } </script> <script type="text/javascript;version=1.9"> try{ var list = ["a","b","c"]; eval('for each (var val in list) {}'); console.log("version", "1.9"); } catch (e) { console.error(e); } </script> </html>
一応テストしたデータも載せておくね。