【问题标题】:Are these line codes the same?这些线路代码是否相同?
【发布时间】:2012-02-18 02:28:58
【问题描述】:

我想知道这两个脚本是否做同样的事情:

parseInt(num)?num=parseInt(num):num=str.length

num=parseInt(num)||str.length;

如果他们不是,我需要知道第二个做什么。

【问题讨论】:

  • 顺便说一句,任何人都知道为什么编译器不将第一个转换为num=parseInt(num)?parseInt(num):str.length?编辑:还是到第二个(因为你们说它是一样的)?
  • 他们没有那么先进。简单的。而且 - 他们为什么要这样做?
  • @RokKralj “他们为什么要这样做?”,他们的工作是在不改变输出的情况下使代码尽可能短,而其中一个要短 13 个字符
  • 啊,很好。然后,答案的第一部分 :) 考虑所有此类情况和代码排列,这确实不是一件简单的事情。

标签: javascript shorthand


【解决方案1】:

是的,它们与后面的(短路评估)一样简洁,并且是 JS(或其他支持它的语言)的美感:

num = parseInt(num) || str.length;

两者又是这个的捷径:

if (parseInt(num)){
   num = parseInt(num);
}
else {
   num = str.length;
}

良好做法:

  • 不要在 num 变量之前忽略 var 关键字,否则它会进入 全局 范围。
  • 除非另有需要,否则始终指定parseInt 的基数,例如parseInt(num, 10)

读数:

【讨论】:

  • 我没有投反对票,但这不是 100% 正确的。第一个类似于您发布的第二个示例。第二个是num = parseInt(num); if(!num) num = str.length;,只调用一次parseInt
  • @copy:我的意思是说 OP 应该与第二个示例一起使用,这是错误代码的标志。
【解决方案2】:

是的,确实如此(但第二个效率稍高一些,因为它不必运行 parseInt 两次)。

【讨论】:

    【解决方案3】:

    是的,他们是平等的。这也是一样的:

    num = parseInt(num)?parseInt(num):str.length
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2012-11-11
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      相关资源
      最近更新 更多