【问题标题】:Can I reduce this Javascript code?我可以减少这个 Javascript 代码吗?
【发布时间】:2011-06-09 20:45:21
【问题描述】:

我可以减少吗

function n()
  {
  var a; 
  if(a = document.getElementById('fb0')) 
    {
    a.onclick = i0;
    document.getElementById('fb1').onclick = i1;
    }
  }

function n()
  {
  if(document.getElementById('fb0').onclick = i0) 
    {
    document.getElementById('fb1').onclick = i1;
    }
  }

我现在没有调试器。我知道 document.getElementById('fb0') 返回一个值,因为第一个 sn-p 工作正常。但它是否需要在 if 语句中评估赋值?

【问题讨论】:

  • 您是否有意尝试在条件句中进行分配?还是双等于错误?

标签: javascript reduction


【解决方案1】:

不,你不能。

document.getElementById('fb0'),正如函数名已经说过的,返回 ID 等于 fb0html element。之后,您将访问属性onclick。但如果获取失败,它将破坏脚本。

在您测试分配是否有效的第一个场景中,如果它意味着元素存在并且只有在它存在时才会执行。

这些是不同的行为。

【讨论】:

    【解决方案2】:

    不是真的;如果getElementById('fb0') 没有返回任何内容,您的页面就会出错,而在第一种情况下不会。

    【讨论】:

    • 作为旁注,我强烈建议不要使用“技巧”来最小化 JS,包括条件中的分配 - 这可能会导致以后的维护头痛。如果您担心下载大小,可以使用一些 JS minifier。
    • 它删除了一些不必要的空格/cmets,有时会缩短变量名,并且它可能(虽然我不知道现有的是否这样做)应用一些不会改变语义的代码更改程序,一切为了减小JS文件的大小。一些示例位于crockford.com/javascript/jsmin.htmlaspnet.codeplex.com/releases/view/34488
    【解决方案3】:

    要检查“document.getElementById('fb0')”是否返回一个元素或null,第二个版本不这样做,如果没有id为“fb0”的元素会抛出错误。如果您在某些时候不从 DOM 中删除“fb0”元素,则第二个版本是可以的。

    【讨论】:

      【解决方案4】:

      如果document.getElementById('fb0') 不存在,那将失败。 document.getElementById('fb0').onclick 在这种情况下意义不大。

      【讨论】:

        【解决方案5】:

        如果您通过 ID 进行大量 DOM 选择,请制作该方法的简化版本:

        function byId( id ) { return document.getElementById(id); };
        
        function n() {
          var a; 
          if(a = byId('fb0')) {
            a.onclick = i0;
            byId('fb1').onclick = i1;
          }
        }
        

        在这种情况下,在条件内进行赋值不会为您节省任何字符。声明的长度是一样的。

        function byId( id ) { return document.getElementById(id); };
        
        function n() {
          var a = byId('fb0'); 
          if(a) {
            a.onclick = i0;
            byId('fb1').onclick = i1;
          }
        }
        

        【讨论】:

        • 您必须权衡第二个函数的成本与节省的字符数。对吗?
        • @Chris Aaker:当然。但是除非你在循环中做一些疯狂的 DOM 选择或其他什么,你永远不会注意到差异。在我看来,你真的应该对任何给定的元素使用一次该方法。如果再次需要相同的元素,您应该缓存结果。因此,例如,如果在函数中获取某个元素,您将在第一次调用该函数时将其缓存,随后的调用将使用缓存的元素。
        猜你喜欢
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        相关资源
        最近更新 更多