【问题标题】:Shorthand in JS ExplanationJS解释中的简写
【发布时间】:2013-11-12 22:50:39
【问题描述】:

谁能给我解释一下这个 JS 速记代码:

   navigator.sayswho = (function(){
      var N= navigator.appName, ua= navigator.userAgent, tem;
      var M= ua.match(/(opera|chrome|safari|firefox|msie|Trident)\/?\s*(\.?\d+(\.\d+)*)/i);
      if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
      M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
      return M;
   })();

代码正在运行,但我不明白它是如何工作的,尤其是这一行:

M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];

【问题讨论】:

  • 它表示如果 M 为真,M 将被重新分配给 [M[1], M[2]] 或者 M 将被重新分配给 [N, navigator.appVersion,'-?'];
  • 如果你能解释一下这个函数的上下文可能会有所帮助。不难看出它的作用,但如果我们知道为什么,解释可能会得到改进。
  • 知道了!这是一个很好的解释。
  • 已经足够好了。这是为了检测浏览器。我只是想知道它的作用,因为我不太懂速记表达。无论如何,谢谢!

标签: javascript shorthand


【解决方案1】:

这个:

M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];

意思是:

if (M)
  M = [M[1], M[2]];
else
  M = [N, navigator.appVersion, '-?'];

更详细地说,它会检查“M”是否为非空,在这种情况下,这意味着 useragent 正则表达式匹配实际的 useragent 字符串。如果已设置,则将“M”重置为新数组;实际上,它只是删除了原始“M”的第零个元素。

如果它没有设置,它会根据应用程序名称、版本字符串和似乎是标记字符串的内容创建一个“假”数组,以表明它是一个无法识别的用户代理。

【讨论】:

  • 感谢您的解释!干杯。
【解决方案2】:
M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];

这里Mboolean type 变量包含真假

if(M)
   M = [M[1], M[2]];
else
   M = [N, navigator.appVersion,'-?'];

【讨论】:

  • 也谢谢你的解释。干杯!
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2012-05-10
  • 2010-09-06
相关资源
最近更新 更多