首页 > 请问这段三元运算如何解读?

请问这段三元运算如何解读?

signin: function() {
    "" == c ? "" == g ? (g = new Loginview({
        el: "body",
        mode: "signin"
    }),
    g.render()) : g.render("signin") : c.render("signin")
}

请问这段三元运算如何解读吗?表示看着很懵逼,第一次看到这样的用法


本质上就是两个 if else,能把代码写成这样的人应当会挨千刀的


js代码用写这么复杂么?开发和老板多大仇。。。 你离职吧,估计你们的日子不好过。。。


这是谁写的,希望膜拜下


这种代码是压缩过后吧,一般正常人都不会这么写


这种代码看起来很累


代码是给人看的!


写代码注意括号,或者分开多个if:
a ? (b ? c : d) : e


显得自己牛才会这么写,他自己看着不累吗?


三元运算都有人说写的不可读的,那你还能读啥?


我来说的清楚一点 本质有2点

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

优先级 运算类型 关联性 运算符
4 条件运算符 从右到左 … ? … : …

条件表达式的优先级别比较低(==之后) 然后是从右到左的 关联性

如@王小强 所说
本文的抽象形式:a ? b ? c : d : e就等价于
a ? (b ? c : d) : e

所以原来式子就等价于:

signin: function() {
    if ("" == c) {
        if ("" == g) {
            g = new Loginview({
                el: "body",
                mode: "signin"
            }),
                g.render()
        } else {
            g.render("signin")
        }
    } else {
        c.render("signin")
    }
}

哈哈哈 增加阅读难度。


有c渲染c,无c判断是否有g,有则渲染,没有则撸一个g来执行渲染。写成这样也是和自己有仇了。

【热门文章】
【热门文章】