扩展脚本中的 OR 运算符

OR operator in extendscript

我正在为 InDesign 创建一些脚本来加速这个过程。
我创建了一个脚本,我认为其中的某行应该可以工作,但 InDesign 不同意。

在以下 ("Geen"||"None"); 失败
app.changeGrepPreferences.appliedCharacterStyle = myDoc.characterStyles.item("[Geen]"||"[None]");

我希望它能更改为 characterStyle [Geen][None]。取决于预定义字符样式中可用的内容。

我做错了什么?这似乎有点基本。

不幸的是,这并不容易。如果你使用 doc.characterStyles.item('foo') 它仍然会给你一个 [object CharacterStyle]。再难也不存在

var doc = app.activeDocument;
$.writeln(doc.characterStyles.item('foo'));
// writes [object CharacterStyle] into the console

你可以做的是使用 try{}catch(error){} 块并请求该对象的 name 属性。在这种情况下,InDesign 将抛出一个您可以捕捉到的错误。然后你可以回退到默认字符样式 [None]

var doc = app.activeDocument;
try{
  $.writeln(doc.characterStyles.item('foo').name);
}catch(e) {
  $.writeln(e);
  $.writeln(doc.characterStyles.item('[None]').name);
}

编辑: 如 mdomino 所述。你可以使用isValid属性。

var doc = app.activeDocument;

if(doc.characterStyles.item('foo').isValid === true) {
  $.writeln('doc.characterStyles.item(\'foo\') exists');
} else {
  $.writeln('use doc.characterStyles.item(\'[None]\') because ');
  var defaultStyle = doc.characterStyles.item('[None]');
  $.writeln(defaultStyle.name + ' is ' + defaultStyle.isValid);
}