1

我正在用javascript编写代码。

colorMixer = function (redIntensity, blueIntensity, greenIntensity)

{
   // mix color
}

colorMixer(10, 8, 7) // means red = 10, blue = 8, green = 7

colorMixer(10, 8) // means red = 10, blue = 8

问题:如何指定red = 10, green = 8,并且没有值blue(我不打算为蓝色设置 0 值)我想要蓝色值未知且不希望为蓝色提供任何值的场景。

4

3 回答 3

4

在不改变调用方法或函数定义的情况下,可以使用 undefined。

colorMixer(10, undefined, 8);

并且,然后测试每个参数,看看它是否undefined在函数内,看看它是否被传递。您也可以null将参数用作未传递参数的指示符,但我更喜欢这样,undefined因为这样您就可以省略不打算传递的尾随参数,它们将自动为undefined.

但是,如果这是经常发生的情况,您可以更改参数,以便将它们传递到对象中,然后该函数可以准确检查传递的内容。这更具可扩展性,因为无论有多少可能的参数,它都同样有效:

colorMixer({red: 10, blue: 8});

然后,在 colorMixer 函数本身中,您查看传递对象的属性,您可以准确地看到传递和未传递的内容。

于 2013-08-08T07:11:03.947 回答
2
colorMixer(color) {
    var r = r in color ? color.r : DEFAULT_R,
        g = g in color ? color.g : DEFAULT_G,
        b = b in color ? color.b : DEFAULT_B;
}

colorMixer({r: 255, g: 127, b: 0});
colorMixer({g: 127, b: 0});
colorMixer({r: 255});

实际上编辑我在编辑错误之前写的内容。如果对通道使用 0,则默认值将被使用,因为 0 评估为 false。

于 2013-08-08T07:11:52.177 回答
0

您可以传递null给函数。

colorMixer(10, null, 8);

在函数内部,您可以检查是否传递了 null。

colorMixer = function (redIntensity, blueIntensity, greenIntensity) {
    if (blueIntensity === null) { ... }
}

==请注意,和之间的区别在===这里很重要。

x == null如果未传递参数,也将是 true,例如,colorMixer(1, 2)

x === null要求值为null

于 2013-08-08T07:12:08.047 回答