这是一个非常简单的例子,我希望你们中的一些人能够回答。这是一个应该返回参数中给出的最大值的函数。但问题是我不明白 它是如何做到的。
function max(a, b) {
return [a, b][ +(a < b) ];
}
我已经习惯了这样的max函数,所以我不知道上面是如何工作的:
function max(a, b) {
return a > b ? a : b;
}
如果有人可以向我解释这段代码究竟是如何找到最大数字的话,那将非常有帮助。例如,他为什么要使用数组?为什么以这种方式使用一元+
? (我是JS的新手。)
答案 0 :(得分:6)
(a < b)
- 评估为布尔值true
/ false
+(a < b)
将布尔值强制转换为int,因此您将拥有0
或1
[+(a < b)]
- 成为数组索引[0]
或[1]
[a,b][+(a<b)]
- 使用[0]
或[1]
,会从新的临时数组a
中抽出b
或[a,b]
值。< / p>
答案 1 :(得分:2)
如果a
小于b
,则结果为true
,由于一元1
运算符,结果转换为+
。
否则结果为false
,并转换为0
。
因此0
和1
用作索引来从数组中获取值。
这样想:
function max(a, b) {
var arrayOfValues = [a, b],
a_is_less_than_b = a < b,
index;
if (a_is_less_than_b)
index = 1;
else
index = 0;
return arrayOfValues[index];
}
答案 2 :(得分:1)
<强>情境:强>
[a, b]
创建一个数组,其中包含索引为0和1的两个元素; (a < b)
返回布尔值true
或false
; +(false|true)
将布尔值转换为数字类型,因此它变为0或1; [a, b][0|1]
返回相应索引下的数组中的元素。示例:强>
var a = 1, b = 2;
[1, 2]
; (1 < 2) === true
; +(true) === 1
; [1, 2][1] === 2
。答案 3 :(得分:0)
您创建一个由a
和b
组成的数组,然后您决定所需的索引。我会扩展它:
function max(a, b) {
var arr = [a,b];
var aLTb = (a < b); // a boolean - whether or not a is less than b
var index = +aLTb; // convert boolean to 0 or 1, which gives us an index
return arr[index];
}