JavaScript布尔值转Yes/No特殊数组索引实现原理问询
问题解答
1. ['No','Yes'][+bool]的运行逻辑
- 首先一元正号运算符
+会强制把布尔值转为数值:+true返回1,+false返回0 - JavaScript的数组支持通过整数索引访问对应位置的元素,
['No','Yes']的0号索引对应值为No,1号索引对应值为Yes - 整个表达式运行时会先把布尔值转成0/1,再用这个数值作为索引取数组对应位置的值,逻辑和三元表达式完全等价,输入false返回No,输入true返回Yes
2. 这种写法是JavaScript独有的特性吗?
不是,这种写法的核心思路是「将输入值转换为下标,直接查表取结果」,在绝大多数支持数组下标访问、类型转换的编程语言中都可以实现,只是不同语言把布尔值转整数的语法有区别:
- Python中可以写:
['No', 'Yes'][int(bool_val)] - PHP中可以写:
['No', 'Yes'][(int)$bool_val] - Java中可以写:
new String[]{"No", "Yes"}[bool_val ? 1 : 0]
3. 这种用法的专业名称是什么?
这种写法属于**查表法(Lookup Table,简称LUT)**的极简实现,也可称为数组索引映射,本质是预先把所有可能的输出结果按输入的映射值排序存储在数组里,跳过分支判断直接通过下标定位结果,非常适合输入枚举值数量极少的简单转换场景。
内容的提问来源于stack exchange,提问作者Chass Long
相关产品推荐
相关产品推荐

