2016-07-28 17 views
0

このスクリプトの最初の部分は正しく動作しているようですが、すべてのドキュメントを繰り返し処理し、特定の正規表現パターンと一致する場合はそれを返しますスクリプトの後半で利用される特定の変数。変数が存在する場合.....オブジェクト対変数、null対undefined

しかし、スクリプトの最後に変数がif文の条件として存在するかどうかは、期待通りに評価されません。 ここで何が間違っていますか? JavaScriptのundefined

// iterate through all docs assigning variables to templates and art 
for (i = 0; i < documents.length; i++) { 
    var curDoc = app.activeDocument = app.documents[i]; 
    var curDocNoExt = curDoc.name.split("."); 
    var workingName = curDocNoExt[0]; 
    if (workingName.match(/^\d{5,6}$/) != null) { 
    var frontArt = app.documents[i]; 
    var targetName = frontArt.name 
    } else { 
    if (workingName.match(/^\d{5,6}(b))$/) != null) { 
     var backArt = app.documents[i]; 
     var backToggle = 1; 
    } else { 
     if (workingName.match(/^fkeep$/) != null) { 
     var frontTemp = app.documents[i]; 
     } else { 
     if (workingName.match(/^fxkeep$/) != null) { 
      var frontSquare = app.documents[i]; 
     } else { 
      if (workingName.match(/^bkeep$/) != null) { 
      var backTemp = app.documents[i]; 
      } else { 
      if (workingName.match(/^bxkeep$/) != null) { 
       var backSquare = app.documents[i]; 
      } 
      } 
     } 
     } 
    } 
    } 
} 

//use variables to do stuff! 

if (backArt != null) { 
    app.activeDocument = backTemp; 
    var namedBackTemp = backTemp.duplicate(targetName + "B"); 
} 
+2

あなたが知っているだけで、['else if'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else#Using_else_if)を使って回避することができますこの入れ子のすべて。それはあなたのコードをもっと読みやすくします。 –

+0

あなたのコードで最初のif条件が真であれば、変数backartは決して定義されません....したがって、参照エラー – Sai

+1

@Sai参照エラーを取得しません。 'backArt'は関数スコープの先頭に[hoisted](https://developer.mozilla.org/en-US/docs/Glossary/Hoisting)されています。 –

答えて

0

あなたがちょうどそうのようなif文で変数を使用することができますので、falseyされています。しかし、より良い練習の文字列を返す、typeofを使用することです

var var1 = '', // can be anything 
    var2; // this is an undefined var 
if (var1){ // var1 has been initialized so this evaluates to true 
    doSomething(); // this will execute 
} 
if (var2){ // var2 is undefined, so it evaluates as false 
    doSomethingElse(); // this will not execute 
} 

オブジェクトの種類:

var var1 = ''; 
var var2 = {}; 

typeof var1 == 'string'; 
typeof var2 == 'object'; 
typeof var3 == 'undefined'; 

if (typeof var1 !== 'undefined'){ 
    doSomething(); // this gets executed because var1 is a string 
} 

がうまくいけば、これはあなたのより良い理解を与える

+0

backArtが 'undefined' *または' 'null'の場合、現在の' if(backArt!= null) 'テストが' true'になるので、これはOPの場合の結果を変更するとは思わない'!='と '!=='の違いについて) – nnnnnn

+0

@nnnnnn私は彼に 'if(backArt!= null){..}の代わりに' if(backArt){...} 'を使うことを提案しています。 –

+0

はい、私はそれが定義されていないテスト( 'undefined == null'が' true'であるため)として使用された場合の動作 – nnnnnn

関連する問題