首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'||‘和'&&’非混合运算符的意外组合

'||‘和'&&’非混合运算符的意外组合
EN

Stack Overflow用户
提问于 2021-02-09 17:08:36
回答 1查看 1K关注 0票数 3

我有下面的钩子,我们用它来绑定到通道。

代码语言:javascript
复制
import { useEffect, useState } from "react";
import { Channel, PresenceChannel } from "pusher-js";
import PrivateChannel from 'pusher-js/types/src/core/channels/private_channel';
import { usePusher } from "./usePusher";

export type ChannelType = PrivateChannel | PresenceChannel

function _useChannel<T extends ChannelType>(channelName: string) {
    const pusher = usePusher()
    const [channel, setChannel] = useState<T>();

    useEffect(() => {
        const pusherChannel = pusher.subscribe(channelName) as T;
        setChannel(pusherChannel);

        return () => pusher?.unsubscribe(channelName);
    }, [channelName, pusher]);

    return channel;
}

当我打开控制台时,我看到这条消息:Unexpected mix of '||' and '&&' no-mixed-operators

这一切为什么要发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 17:22:31

正如@Drew Reese所说,你在某个地方有一个混合了&&||的复杂逻辑表达式,并且你已经配置了ESLint来在发生这种情况时警告你。你必须找出这是在哪里发生的,并添加必要的括号来澄清你的意图。

来自ESLint docs

代码语言:javascript
复制
var foo = a && b || c || d;    /*BAD: Unexpected mix of '&&' and '||'.*/
var foo = a && b ? c : d;      /*BAD: Unexpected mix of '&&' and '?:'.*/
var foo = (a && b) ? c : d;    /*GOOD*/
var foo = (a && b) || c || d;  /*GOOD*/
var foo = a && (b || c || d);  /*GOOD*/

如果您不确定布尔运算符的正确优先级应该是什么,可以认为&&等同于multiplication||等同于addition,因此&&优先于||

例如:

代码语言:javascript
复制
a && b || c || d 
<=> a*b + c + d 
<=> (a && b) || c || d
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66115910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档