如何将这个函数从as3转换为javascript



我对javascript有点陌生,所以我不确定如何重写这个在actionscript3中编写到js的函数:

function map(v:Number, a:Number, b:Number, x:Number = 0, y:Number = 1):Number {
    return (v == a) ? x : (v - a) * (y - x) / (b - a) + x;
}

在javascript中会是什么样子?到底是什么原因导致现在这种做法行不通呢?

如果你拿走所有类型数据,它应该在JS中工作,但你需要检查那些默认参数值,因为默认参数不受支持。

function map(v, a, b, x, y) {
    if(x == undefined || isNaN(x)) x = 0;
    if(y == undefined || isNaN(y)) y = 1;
    return (v == a) ? x : (v - a) * (y - x) / (b - a) + x;
}

要特别回答你的问题的最后一部分,有两个问题会阻止你的代码作为JavaScript运行:

    JavaScript是一种松散类型的语言,因此在函数参数上声明类型是不允许的。为了避免意外的错误,你可以测试每个参数并抛出一个不是你需要的类型的错误。
  1. JavaScript不允许提供默认参数,但允许省略函数参数。这与ActionScript不同,在ActionScript中,不提供没有默认值的参数会抛出错误。处理这个问题的方法是测试参数是否未定义,并在需要的地方设置值。

我在上面对NaN的额外测试是一个额外的预防层,不是必需的,但它可以同样用于所有参数,使代码更健壮。

Javascript没有编译时类型。删除所有的:Number,你应该没事。

(噢,遗漏了默认参数值,如其他答案所述)

function map(v,a,b,x,y){
  if(x===undefined)x=0;
  if(y===undefined)y=1;
  return (v==a)?x:(v-a)*(y-x)/(b-a)+x;
}

最新更新