Javascript 返回值返回为未定义
我正在尝试为Illustrator编写一个脚本,它将从对象中读取我需要的颜色,然后在需要的地方用该颜色填充模板。它一直以未定义的状态返回。我对Javascript很陌生,有什么想法我做错了什么 我尝试过以Javascript 返回值返回为未定义,javascript,adobe,return-value,adobe-illustrator,object-literal,Javascript,Adobe,Return Value,Adobe Illustrator,Object Literal,我正在尝试为Illustrator编写一个脚本,它将从对象中读取我需要的颜色,然后在需要的地方用该颜色填充模板。它一直以未定义的状态返回。我对Javascript很陌生,有什么想法我做错了什么 我尝试过以newCMYKColor[stockColor]的身份返回,newCMYKColor[stockColors]并返回stockColor[newCMYKColor] convertRoofColorToCMYK = function(stockColor) { var newCMYKColo
newCMYKColor[stockColor]
的身份返回,newCMYKColor[stockColors]
并返回stockColor[newCMYKColor]
convertRoofColorToCMYK = function(stockColor) {
var newCMYKColor = new CMYKColor(),
stockColors = {
BlackPoly: [80, 72, 68, 100],
LightBlue: [100, 43, 0, 30],
DarkBluePoly: [95, 74, 7, 44],
PurplePoly: [82, 98, 0, 12],
GreenPoly: [90, 12, 95, 40],
YellowPoly: [0, 19, 89, 0],
EcruPoly: [6, 13, 41, 4],
OrangePoly: [0, 73, 98, 0],
RedPoly: [7, 100, 82, 26],
GreyPoly: [10, 4, 4, 14],
WhitePoly: [0, 0, 0, 0]
};
try {
newCMYKColor.cyan = stockColors[stockColor][0];
newCMYKColor.magenta = stockColors[stockColor][1];
newCMYKColor.yellow = stockColors[stockColor][2];
newCMYKColor.black = stockColors[stockColor][3];
} catch (e) {
newCMYKColor.cyan = 0;
newCMYKColor.magenta = 0;
newCMYKColor.yellow = 0;
newCMYKColor.black = 0;
}
return newCMYKColor;
};
roofColorCMYK = convertRoofColorToCMYK(Clipboard.roof_color);
if (!roofColorCMYK == undefined) {
if (app.activeDocument.Layers["Tent Pieces"] &&
app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"]) {
for (i = 0; i < app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"].pathItems.length; i++) {
app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"].pathItems[i].fillColor = roofColorCMYK;
} else {
alert("sorry we are not able to fill the tent roof with the " +
Clipboard.roof_color + " color.")
}
convertRootColorToCmyk=函数(stockColor){
var newCMYKColor=new CMYKColor(),
股票颜色={
BlackPoly:[80,72,68,100],
浅蓝色:[100,43,0,30],
暗蓝色多边形:[95,74,7,44],
紫癜性:[82,98,0,12],
绿色保利:[90,12,95,40],
YellowPoly:[0,19,89,0],
埃克鲁波利:[6,13,41,4],
橙色球:[0,73,98,0],
红保利:[7100,82,26],
格雷波利:[10,4,4,14],
WhitePoly:[0,0,0,0]
};
试一试{
newCMYKColor.cyan=stockColors[stockColor][0];
newCMYKColor.magenta=stockColors[stockColor][1];
newCMYKColor.yellow=stockColors[stockColor][2];
newCMYKColor.black=stockColors[stockColor][3];
}捕获(e){
newCMYKColor.cyan=0;
newCMYKColor.magenta=0;
newCMYKColor.yellow=0;
newCMYKColor.black=0;
}
返回newCMYKColor;
};
rootcolorcmyk=convertRootColorToCmyk(剪贴板.roof\u颜色);
如果(!rootcolorcmyk==未定义){
如果(app.activeDocument.Layers[“帐篷碎片”]&&
app.activeDocument.Layers[“帐篷片”]。Layers[“屋顶复合材料”]){
对于(i=0;i
在我添加else/if语句之前,它告诉我在
if(app.activeDocument.Layers[“Tent-Pieces]”和&app.activeDocument.Layers[“Tent-Pieces”].Layers[“Roof Composite”])中未定义。
添加else/if语句之后,它每次都会给我警告。请查看try-catch block的MDN规范
您必须记住,在try-catch块之后不会执行任何代码
我建议您通过以下方式更改代码:
try {
newCMYKColor.cyan = stockColors[stockColor][0];
newCMYKColor.magenta = stockColors[stockColor][1];
newCMYKColor.yellow = stockColors[stockColor][2];
newCMYKColor.black = stockColors[stockColor][3];
return newCMYKColor;
} catch (e) {
newCMYKColor.cyan = 0;
newCMYKColor.magenta = 0;
newCMYKColor.yellow = 0;
newCMYKColor.black = 0;
return newCMYKColor;
}
或者在末尾使用finally块(finally中的代码总是像以前一样执行)
我认为这个
!rootcolorcmyk==未定义的(不是!)条件永远不会是true
因为你正在将你的值转换为真实或虚假的值。而convertRootColorToCmyk
永远不会返回未定义的值,因为你总是返回一个值。你能记录RootColorCmyk
的值吗?这似乎有效!它不再给我一个未定义的值,但我认为我的Layers现在可能就是问题所在。谢谢!您可以指定任何资源来说明这一点吗?您必须记住,在try-catch块之后不会执行任何代码。?不是correct@ajuni880这就是我在阅读此MDN时所理解的。有一个特殊的异常相关子句,不管是否存在异常,它都会执行,这似乎很奇怪n异常,但这个构造实际上确实起到了作用。重要的一点不是finally子句总是执行,而是try…catch之后的普通代码不会执行。
try {
newCMYKColor.cyan = stockColors[stockColor][0];
newCMYKColor.magenta = stockColors[stockColor][1];
newCMYKColor.yellow = stockColors[stockColor][2];
newCMYKColor.black = stockColors[stockColor][3];
} catch (e) {
newCMYKColor.cyan = 0;
newCMYKColor.magenta = 0;
newCMYKColor.yellow = 0;
newCMYKColor.black = 0;
} finaly {
return newCMYKColor;
}