当前位置: 首页 > 知识库问答 >
问题:

javascript - 这个前端代码是这么理解吗?

公西承
2023-06-14

const dataItem = (msg.data && msg.data[0]) || msg;

如果msg.data和msg.data[0]都为真时返回msg.data[0],否则返回msg?

共有4个答案

濮阳研
2023-06-14

检查 msg 对象中是否有data,如果有,就将data的第一个元素赋值给 dataItem 变量。如果 msg 对象中没有data,则将整个 msg 对象赋值给 dataItem

何烨华
2023-06-14

你理解的没错
|| 运算前半为真则直接返回前半操作数,为假则返回后半操作数
&& 运算前半为假则直接返回前半操作数,为真则返回后半操作数
你这里的代码先看外层的 ||
当前半 (msg.data && msg.data[0]) 为假时返回后半 msg
msg 不存在 data 属性或者 msg.data[0]false / 0 / '' / undefined / null / NaN 时返回 msg
当前半 (msg.data && msg.data[0]) 为真时直接返回前半
(msg.data && msg.data[0]) 为真即 msg.datamsg.data[0] 都为真
根据 && 返回后半操作数 msg.data[0]

柳俊逸
2023-06-14

const dataItem = (msg.data && msg.data[0]) || msg;
解:const dataItem = 当(msg.data 和 msg.data[0] )为true 就为true;

                当(msg.data 和 msg.data[0] )为false 就报错了

总结:和msg没有关系 要么是true,要么就是报错!
希望对你有帮助

张心水
2023-06-14

并不是,我改成三元你就明白了

const dataItem = (msg.data && msg.data[0]) || msg;
// 等同于
const dataItem = msg.data ? msg.data[0] : msg;

Edit:

你的理解是正确的,之前回答没有看清问题描述,也没考虑 msg.data 超出预期的情况。比如说 msg.data 是一个对象。
所以可以修改为:

const dataItem = (msg.data && msg.data[0]) || msg;
// 等同于
const dataItem = msg.data?.data?.[0] || msg;

不过一般业务里面书写的时候并不会这样写,容易产生误导。如果是我的话,我会这样写:

const dataItem = msg.data?.length ? msg.data[0] : msg
 类似资料:
  • 请求各位大哥帮忙解密,祝大哥们发财娶漂亮老婆!! 完整版:【腾讯文档】 https://docs.qq.com/doc/DV2FaZ0J4c1lzYUtB (function(_0x319d23,_0x253eaa){const _0x17f6bd=_0x319d23();function _0x5ef634(_0x4d9bcf,_0x332385,_0x131a87,_0xdb2988){ret

  • 这个代码对 影响window.screen 高度与宽度是什么 物理分辨率:即硬件所支持的(比如:手机的分辨率)】和【逻辑分辨率:即软件所能到达(比如:各种像素单位在不同屏幕下,设备像素比例是不同的)

  • 我是Python初学者。我对Python中的正则表达式有所了解。例如:\d指的是匹配0个或更多的数字。 上面的表达式-第3行-在做什么?更具体地说,写有什么意义?

  • 问题内容: 我正在尝试让Javascript读取/写入PostgreSQL数据库。我在github上找到了这个项目。我能够获得以下示例代码以在节点中运行。 接下来,我试图使其在网页上运行,但是似乎什么也没有发生。我在Javascript控制台上进行了检查,它只显示“要求未定义”。 那么这是什么“要求”?为什么它在节点中有效但在网页中无效? 另外,在我让它在节点上工作之前,我必须做。那是什么意思 我

  • 为什么 if((element2.wg_id != element1.wg_id)) 我打印的是全部数据,不会打印出不相等的数据。if((element2.wg_id == element1.wg_id)) 却可以找出相等的数据?