如何将此功能从as3转换为javascript

时间:2011-08-07 16:06:48

标签: javascript actionscript-3

我对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中会是什么样子?究竟是什么原因导致现在无法正常工作?

3 个答案:

答案 0 :(得分:5)

如果你拿走所有的类型数据,它应该在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身份运行:

  1. JavaScript是一种松散类型的语言,因此不允许在函数参数上声明类型。为避免出现意外错误,您可以测试每个参数并抛出错误,但不是您需要的类型。
  2. JavaScript不允许提供默认参数,但允许省略函数参数。这与ActionScript不同,ActionScript不提供没有默认值的参数会引发错误。处理此问题的方法是测试未定义的参数,并在需要时设置值。
  3. 我在上面对NaN的额外测试是一个额外的预防层而不是必需的,但它同样可以用于所有参数,以使代码更健壮。

答案 1 :(得分:2)

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

(糟糕,错过了默认参数值,如其他答案中所述)

答案 2 :(得分:0)

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;
}