Angular ngx-Typeahead示例中map(data&&data.items||[])语句含义咨询
核心逻辑解释
你对逻辑运算符的返回值存在误解,JavaScript/TypeScript中的&&、||不会直接返回布尔值,而是返回运算过程中第一个决定结果的操作数本身:
&&从左到右判断操作数是否为假值(undefined、null、NaN、0、''、false):若左侧为假值直接返回左侧操作数,若左侧为真值则返回右侧操作数||从左到右判断操作数是否为假值:若左侧为真值直接返回左侧操作数,若左侧为假值则返回右侧操作数
对应代码拆解
你提问的这行代码:
map((data: SearchResponse) => data && data.items || [])
执行逻辑分为两步:
- 先计算
data && data.items:- 如果接口返回的
data是null/undefined这类假值,直接返回data(假值) - 如果
data是真值,返回data.items的实际值,也就是接口定义的Owner[]类型数组
- 如果接口返回的
- 再将第一步的结果和
[]做||运算:- 如果第一步的结果为假值,返回兜底的空数组
- 如果第一步的结果为真值,直接返回第一步得到的
data.items数组
常见误区澄清
- 这行代码永远不会返回布尔值
true,也不会返回完整的data对象 - 只要接口返回的
data存在、且data.items不为假值,最终返回的就是data.items本身 - 这行是旧版JS的安全兜底写法,等效于更易读的新语法:
map((data: SearchResponse) => data?.items ?? [])
内容的提问来源于stack exchange,提问作者Justin Tolchin
相关产品推荐
相关产品推荐

