return 'Yes'的奇怪实现,'No'而不是javascript中的true,false

A strange implementation of return 'Yes', 'No' instead of true, false in javascript

最近,我看到了这个

的替代实现
function boolToWord( bool ){
  return bool ? "yes" : "no" ;
}  

至此

function boolToWord( bool ){
  return ['No','Yes'][+bool];
}

我可以澄清一下 ['No','Yes'][+bool]; 在做什么吗?我只知道 +bool 只是根据布尔值将布尔值变成 0 或 1。但是它如何将它用作 select 前一个数组 ['No', 'Yes'] 的值的索引?这是仅 javascript 的功能吗?这个叫什么?谢谢。

['No', 'Yes'] 是一个数组字面量,和任何其他数组一样,它可以通过索引访问。如您所述,一旦 bool 转换为 01 的整数,就会访问数组元素。请注意,Javascript 中的数组是从零开始的,因此数组的第一个元素的索引为 0,第二个元素的索引为 1.

['No', 'Yes'] 是一个数组。在索引 0 下有 No,在索引 1 下有 Yes。当您使用 +bool 时,它会将此布尔值转换为数字:

  • +false === 0
  • +true === 1

所以 +bool 你将收到 01,并从数组中选择相应的值

['No','Yes'] 是一个数组,我们将访问索引 0 或 1,对应于 false 或 true。

当我们在 bool 上使用 + 运算符时,例如+bool 我们正在转换为 0 或 1 的整数;

下面是一个更详细的boolToWord版本,记录中间值,不用于生产,只是为了说明原理:

function boolToWord( bool ) {
  let index = +bool;
  let array = ['No','Yes'];
  console.log(`Bool: ${bool}, array index: ${index}, array:`, array );
  let result = array[index];
  console.log("Result:", result);
  return result;
}

boolToWord(false);
boolToWord(true);

+false、+true 的日志输出:

console.log("+false = ",+false);
console.log("+true = ",+true);