【问题标题】:javascript shorthand syntaxjavascript 速记语法
【发布时间】:2012-08-27 09:28:20
【问题描述】:

我想知道如何用简写的方式编写语句将执行

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

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

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

我还找到了另一个详细的解释over here

谢谢,理查德

【问题讨论】:

  • 第一个需要执行window.location而不是评估它,所以如果第一个不正确它永远不会进入下一个评估(在这种情况下执行语句

标签: javascript syntax shorthand shorthand-if


【解决方案1】:

我认为你错过了另一个=

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

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

【讨论】:

  • 我不认为这是正确的。 Window.location never 将等于那个值。我认为该语句的意思是分配=,将用户重定向到个人资料屏幕。
  • window.location 是一个对象,所以比较 window.location == "users/profile" 没有意义。
  • 也就是说,window.location是当前页面的URL。 URL 中必须至少包含http://hostname,所以这与写var success = !data.user || false; 没有什么不同,而后者又相当于写var success = false;
  • 谢谢,但我认为你可以以某种方式执行不评估的语句
【解决方案2】:

!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 已分配),则重定向用户/个人资料

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

【讨论】:

  • 是的,但我不得不使用 && 而不是 ||我想,不确定
  • @Richard && 也没有意义,那么该语句将只是无条件的重定向。
  • @Richard if (!a || "number" == typeof a) "如果 a 是未定义的或数字"。
  • @Richard b || (b = $(".profile-popup")); "如果 b 未定义,则将其分配给 ..."
  • @Richard j(a) && (b.fadeOut("fast"), m(!1, a)); -- 如果第一部分 j(a) 为假,则第二部分不会执行。所以这就像写“如果 j(a) == true 然后执行这个......”
猜你喜欢
  • 2013-06-28
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多