1

我看到在 PHP 中有可以在一个参数中接受多个选项的函数,例如:

error_reporting(E_ERROR & E_WARNING);

我想在我的 javascript 函数中实现这种功能。你知道接受这种参数的函数的例子吗?

我对函数如何知道传递的选项是什么感到非常困惑......

4

2 回答 2

2

(假设它是:error_reporting(E_ERROR | E_WARNING);)

嗯,它是一个位掩码。所以 E_ERROR 可能是这样的数字(二进制​​):

0010000

和 E_WARNING 可能是:

0000010

当它们与 | 结合时,你会得到

0010010

(单个整数,设置多个位)

然后,该函数可以检查使用 & 位运算符设置了哪些位。您当然可以在 javascript 中执行此操作,尽管它可能不太常见,并且随着数字变得越来越大,效率和可靠性可能会降低,因为 javascript 并没有真正的整数,它们实际上是浮点数。

在 javascript 中,您可能更喜欢使用如下内容:

error_reporting({warning: true, error: true});

(编辑以更明智的方式显示它,用 | 不是 & 将它们结合起来)

于 2011-10-29T17:16:24.067 回答
1

是的,这是可能的,但它适用于|.

var flag1 = 1,
    flag2 = 2; // powers of 2

function get(flags) {
    if((flags & flag1) === flag1) { // remove all other bits and check
        alert('flag1');             // whether you get the flag itself
    }

    if((flags & flag2) === flag2) {
        alert('flag2');
    }
}

get(flag1 | flag2); // alerts both

您当然可以创建一个辅助函数来执行检查,这样您就不需要这些括号:

function contains(flags, flag) {
    return (flags & flag) === flag;
}

http://jsfiddle.net/pimvdb/NpFYj/1/

于 2011-10-29T17:18:44.173 回答