Javascript 是否有可以代替二元运算符使用的函数?
Does Javascript have functions for use instead of binary operators?
我的问题最好用一个例子来说明。
有没有办法使用像
这样的语法
array.reduce(and)
而不是
array.reduce((a, b) => a && b)
在 Javascript?
类似的问题适用于其他二元运算符,例如 || + - *
和许多其他运算符。 !
运算符存在类似的问题,例如 array.map(not)
.
编辑:
抱歉,如果不够清楚。我的意思是问 JS 是否像其他一些语言一样,为上述运算符提供了实际的 内置 别名。我很清楚我可以定义自己的函数来执行此操作。
实际上,是的——它们被称为 函数。 :-)
const and = (a, b) => a && b;
let array = [true, false, true];
console.log(array.reduce(and)); // false
array = [true, true, true];
console.log(array.reduce(and)); // true
我在那里使用了箭头函数,但它可以是任何类型的函数。
JavaScript 没有任何 other 方法可以做到这一点,但函数可以很好地完成这项工作,为常见操作提供可重用的语义。
重新编辑
I meant to ask whether JS has actual built-in aliases for the mentioned operators, like some other languages.
不,但是您显示的代码无论如何都不会使用别名。别名看起来像这样:array.reduce((a, b) => a and b)
您可以定义函数:
function and(x, y) {
return x && y;
}
function or(x, y) {
return x || y;
}
bool_values = [true, true, false];
console.log("and", bool_values.reduce(and));
console.log("or", bool_values.reduce(or));
function add(x, y) {
return x + y;
}
function multiply(x, y) {
return x + y;
}
num_values = [1, 2.5, 3]
console.log("and", num_values.reduce(add));
console.log("or", num_values.reduce(multiply));
唯一具有等效内置函数的二元运算符是 **
(Math.pow
) and in
(Reflect.has
)。
关于 array.reduce(and, true)
和 array.reduce(or, false)
具体而言,您可以将 every
and some
与身份函数一起用作回调,或者 Boolean
使用内置函数。
实际上只有&&
和||
两个方法,使用Array#every
or Array#some
with Boolean
作为回调。
对于所有其他操作,您需要一个自己的函数。
function checkAnd(array) {
return array.every(Boolean);
}
function checkOr(array) {
return array.some(Boolean);
}
console.log(checkAnd([true, true, true]));
console.log(checkAnd([true, false, true]));
console.log(checkAnd([false, false, false]));
console.log(checkOr([true, true, true]));
console.log(checkOr([true, false, true]));
console.log(checkOr([false, false, false]));
我的问题最好用一个例子来说明。
有没有办法使用像
这样的语法array.reduce(and)
而不是
array.reduce((a, b) => a && b)
在 Javascript?
类似的问题适用于其他二元运算符,例如 || + - *
和许多其他运算符。 !
运算符存在类似的问题,例如 array.map(not)
.
编辑:
抱歉,如果不够清楚。我的意思是问 JS 是否像其他一些语言一样,为上述运算符提供了实际的 内置 别名。我很清楚我可以定义自己的函数来执行此操作。
实际上,是的——它们被称为 函数。 :-)
const and = (a, b) => a && b;
let array = [true, false, true];
console.log(array.reduce(and)); // false
array = [true, true, true];
console.log(array.reduce(and)); // true
我在那里使用了箭头函数,但它可以是任何类型的函数。
JavaScript 没有任何 other 方法可以做到这一点,但函数可以很好地完成这项工作,为常见操作提供可重用的语义。
重新编辑
I meant to ask whether JS has actual built-in aliases for the mentioned operators, like some other languages.
不,但是您显示的代码无论如何都不会使用别名。别名看起来像这样:array.reduce((a, b) => a and b)
您可以定义函数:
function and(x, y) {
return x && y;
}
function or(x, y) {
return x || y;
}
bool_values = [true, true, false];
console.log("and", bool_values.reduce(and));
console.log("or", bool_values.reduce(or));
function add(x, y) {
return x + y;
}
function multiply(x, y) {
return x + y;
}
num_values = [1, 2.5, 3]
console.log("and", num_values.reduce(add));
console.log("or", num_values.reduce(multiply));
唯一具有等效内置函数的二元运算符是 **
(Math.pow
) and in
(Reflect.has
)。
关于 array.reduce(and, true)
和 array.reduce(or, false)
具体而言,您可以将 every
and some
与身份函数一起用作回调,或者 Boolean
使用内置函数。
实际上只有&&
和||
两个方法,使用Array#every
or Array#some
with Boolean
作为回调。
对于所有其他操作,您需要一个自己的函数。
function checkAnd(array) {
return array.every(Boolean);
}
function checkOr(array) {
return array.some(Boolean);
}
console.log(checkAnd([true, true, true]));
console.log(checkAnd([true, false, true]));
console.log(checkAnd([false, false, false]));
console.log(checkOr([true, true, true]));
console.log(checkOr([true, false, true]));
console.log(checkOr([false, false, false]));