Javascript 如何尽可能减少这种情况
我不理解我在这种情况下的行为。我尽量减少代码。 在这种情况下,我想知道Javascript 如何尽可能减少这种情况,javascript,ecmascript-6,Javascript,Ecmascript 6,我不理解我在这种情况下的行为。我尽量减少代码。 在这种情况下,我想知道r.user.id或r.user.uid是否等于getUser.uid。 为此,我在下面编写了这段代码。它可以工作,但我不明白为什么r?.user?.id | uid==getUser?.uidme返回toto不是布尔值。此代码是否与上面的代码类似 if (r?.user?.id||uid === getUser?.uid) { console.log("test 1", r?.user?.id||u
r.user.id
或r.user.uid
是否等于getUser.uid
。
为此,我在下面编写了这段代码。它可以工作,但我不明白为什么r?.user?.id | uid==getUser?.uid
me返回toto
不是布尔值。此代码是否与上面的代码类似
if (r?.user?.id||uid === getUser?.uid) {
console.log("test 1", r?.user?.id||uid === getUser?.uid);
}
if (r.user?.id === getUser?.uid) {
console.log("test 2");
}
if (r.user?.uid === getUser?.uid) {
console.log("test 3");
}
正如VLAZ所说,
| |
不是逻辑OR运算符,而是语法错误。(它看起来像逻辑OR运算符[|
],后跟按位OR运算符[|
],但不能这样做,因为它们之间需要一个操作数)。您只需要|
(逻辑OR运算符)
我假设在您的真实代码中,r.user
可能是未定义的
或null
(对于getUser
),否则所有这些可选的链接操作符都是不必要的
如果r.user
为undefined
或null
,则r.user?.id
将为undefined
。因此,getUser?.uid
(如果getUser
是undefined
或null
)。假设您不想在undefined
情况下进行匹配,则需要检查是否存在这种情况
鉴于此,您的第一个示例可能会尽可能简洁,或者更明确:
if (r.user?.id !== undefined && (r.user?.id === getUser?.uid || r.user?.uid === getUser?.uid)) {
// ...
}
或者您可以考虑添加变量:
const gid = getUser?.uid;
if (gid !== undefined && (r.user?.id === gid || r.user?.uid === gid)) {
// ...
}
在
r
之后添加?
,如果r
本身可能是未定义的
或空的
,您的条件太多,不必要地复杂。我不清楚您想用这段代码实现什么,所以我假设它的目的是验证getUser.uid
是否等于r.user.id
或r.user.uid
(存在的第一个)
我将在两个变量中提取这两个值:
const id1=getUser.uid;
常量id2=r.user?.id | | r.user?.uid;
这里的id1
要么是getUser.uid
(如果getUser
具有属性uid
),要么是未定义的
id2
是第一个匹配:
,如果r.user.id
具有属性r
,则该属性是具有属性user
的对象李>id
,如果r.user.uid
没有r.user
但有id
李>uid
如果未定义
没有r
或用户
有r
,但用户
没有r.user
和id
uid
id1
与id2
进行比较,可能还要防止未定义的:
if(id1!==undefined&&id1==id2){
console.log('yes!');
}
我建议-
函数userMatches(getUser,r)
{if(getUser&&r?.user)
返回r.user.id==getUser.uid
||r.user.uid===getUser.uid
其他的
返回错误
}
或者使用默认参数,比如-
constusermatches=({uid=0},{user={})=>
user.id==uid | | user.uid==uid
什么是r?.user?.id | uid===getUser?.uid
应该是什么?它当前是r?.user?.id | |(uid==getUser?.uid)
()。你是说(r?.user?.id | | uid)==getUser?.uid
还是别的什么?什么是uid
?您可以对嵌套用户const{id,uid}=r.user??{}
然后使用if(r.user&&[id,uid].includes(getUser?.uid))
也不需要在r.user?.id
中进行可选链接,因为您已经在前面检查了r.user
,在getUser
之后添加问号有什么意义?getUser
是否总是定义的?r?
也一样。您想要实现什么?是否要验证getUser.uid
是否等于r.user.id
或r.user.uid
(存在的第一个)?如果r.user.id
和r.user.uid
都应与getUser.uid
进行比较,则不能简单地比较“id2
是第一个匹配的…”您必须同时选中两者。“两者”表示&&
。问题中的代码使用|
。
const gid = getUser?.uid;
if (gid !== undefined && (r.user?.id === gid || r.user?.uid === gid)) {
// ...
}