忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[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絵文字

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)