忍者ブログ

ぼんぷろぐ

InDesign、イラレ、フォトショ(CS6 Win)の勉強中。。。(旧まとめいみブログ)

[InDesign]
nullとの比較でオブジェクトの有無を確認できるじゃん!(InDesignスクリプト)

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

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

あるふぁ(仮)
InDesignで新聞組版のようなことをしてる人です。

InDesignスクリプトについて

つくったInDesignスクリプトのまとめ

twitter

フリーエリア