1

我想知道如何用简写来写语句将执行

这个不起作用,但我在插件中多次看到这种语法 - 变量与语句等混合在一起。

有人可以解释正确使用这种速记语法吗? 如果第一个评估为真,我想“执行”而不是“评估”第二个语句!

var succes = !data.user||(window.location = "users/profile");

我知道第一个例子很简单,这个更好,它还使用逗号将语句串起来,我想知道如何学习这种语法。

},
        hide: function (a,
        b) {
            if (f && !(500 > (new Date).getTime() - f.getTime())) {
                if (!a || "number" == typeof a) a = k();
                b || (b = $(".profile-popup"));
                j(a) && (b.fadeOut("fast"), m(!1, a));
                e && (clearInterval(e), e = null)
            }
        }
    }
}();

编辑 我将我的第一个示例更改为在我的代码中使用 && 并且它起作用了,所以,就是这样 - 对于其他阅读的人 - 并且如果使用 window.location,你应该使用绝对 url

我还在这里找到了另一个详细的解释。

谢谢,理查德

4

2 回答 2

5

我认为你错过了另一个=

var succes = !data.user || (window.location == "users/profile");

您的示例分配,而是==比较。

于 2012-09-02T08:12:14.607 回答
4

的一般模式!obj || obj = "something"只是以下的简写:

if (obj === undefined) {
    obj = "something";
}

那是因为!obj评估false它是否未定义(该模式似乎也假设obj不会被定义为true)。

同样,该模式f(a) && (g(b), h(c))是以下的简写:

if (f(a) == true) {
    g(b);
    h(c);
}

对于引用的一段代码:

var succes = !data.user||(window.location = "users/profile");

这隐含的意思是:

  1. 如果 data.user 未定义,则设置success为 true。
  2. 否则(如果data.user 分配),则重定向users/profile

确切的含义是任何人在不知道上下文的情况下的猜测,但它似乎意味着“如果用户数据可用,则重定向个人资料屏幕,否则......”

于 2012-09-02T08:20:40.460 回答