var a=1;
(function(){
var a=2;
return Function("alert(a)");
})()();
はJavaScriptでは1が表示されますがExtendScriptでは2が表示されます。//演算によりダイコンをラジコンに変換する例
var obj={
name:"",
"-":function(s){
this.name=this.name.replace(s," ");
return this},
"+":function(s){
this.name=this.name.replace(" ",s);
return this},
};
obj.name="ダイコン";
obj-"ダイ"+"ラジ";
alert(obj.name); //ラジコン
Another subtle difference between #JavaScript and #ExtendScript:
— Marc Autret (@indiscripts) 2017年12月3日
var a=[], i=0;
a[i] = ++i; // Warning: in ExtendScript the left-side `i` is already set to 1!
alert( uneval(a) ); // JS says `[1]` ; ExtendScript says `[undefined, 1]`
関数の外でvarをつけてもグローバル変数になるというのは5、6あたりと同じことでしょうか。
var a = "original";
test();
alert(a);
function test() { a = 123; }
これはバグ。
var str1 = "星稜14-9遊学館";
var reg = /([0-9]+)\-([0-9]+)/;
//str1.match(reg);
str1 = str1.replace(reg, RegExp.$2 + "-" + RegExp.$1);
$.writeln(str1);
$1~$9にすぐに値が入らないバグ。3行目のコメントを外せば(1回検索しとけば)入ってくれる。
お~まち様、コメントありがとうございます。いつもDOMにお世話になってます
どちらもJavaScriptの仕様通りだと思います。たとえばalert(1+1)を実行すると、まず1+1が評価され、その結果の2を関数alertに渡してアラートが出ます。同じように関数replaceが実行されるのは引数の式「RegExp.$2 + "-" + RegExp.$1」が評価されるよりも後です。
これをやるなら第2引数に関数を使って
str1 = str1.replace(reg, function($0,$1,$2){return $2+"-"+$1});
のようにするといいです。
1つ目の方はどういう挙動が正しいと思っておられるのかよく分からないですが、JavaScriptで関数の外でvarをつけて宣言した変数はまさにグローバル変数です。
ありがとうございます。私今までずっと勘違いしてました。勉強しなおしです。
先ほどコメントで質問をさせいただいたのですが、こちらの理解が不足していたため消去いたしました。
お騒がせして申し訳ありません。
どうぞご放念下さいませ。
プロフィール
最近の記事