Indesign JavaScriptで、取得したInDesignオブジェクトがほんとに存在するかをチェックできるisValidプロパティはCS4からの実装で、それ以前はエラーをキャッチするくらいしかチェック方法がなかった…
ってなことを当ブログの『InDesign Javascriptについて』のとこで書いてたんですが、全然そんなことはなかった。
『null』と比較演算子を使って比較すればよかったのですね。
#target "InDesign"
var nDocu=app.documents.item("存在しないドキュメント");
$.writeln(nDocu==null); //これがtrue
$.writeln(nDocu===null); //これもtrue!?
$.writeln(nDocu!=null); //false
$.writeln(nDocu!==null); //false
if (null) {$.writeln(true)} else {$.writeln(false)} //nullはifカッコの中ではfalse扱い
if (nDocu) {$.writeln(true)} else {$.writeln(false)} //でもこれはtrue
$.writeln(nDocu); //[object Document]
$.writeln(nDocu.toSource()); //resolve("/document[@name=\"存在しないドキュメント\"]")
$.writeln(nDocu.isValid); //これはfalse(CS4以降)
$.writeln(null==null); //trueですよね
$.writeln(nDocu==nDocu); //まさかのfalse
$.writeln(nDocu>=nDocu); //trueとな
まずDocumentsのitemメソッドを使って、"存在しないドキュメント"という名前の存在しないドキュメントを取得。
これをnullと==で比較するとtrueが返ります。
さらになんと===で比較してもtrue。
これを見たら、なんだitem()がnullを返してるだけじゃんって思われそうですがそうじゃないのです。
toSource()とかやってみれば分かる通り、あくまでitem()が返したのは[object Document]で、それが『nullと比較するとtrueを返す』という特殊な性質を持ってるようです。
PR