【问题标题】:Shortest way to write this in JavaScript [closed]用 JavaScript 写这个的最短方法 [关闭]
【发布时间】:2011-03-14 23:30:10
【问题描述】:

如果$('.item:last').attr('id').split('-')[1] 不是undefined var liid 等于那个,如果是undefined 那么它等于null

【问题讨论】:

  • 您熟悉if else 语言结构吗?
  • ...是的。我知道,但我喜欢保持我的代码简洁,对于这样的事情,知道其他语言,我想像下面所有其他人一样回答,有一种更短更简洁的编写方式,而不是声明我的 var,然后检查,然后设置,只需一行即可完成。
  • 元素 ID 中是否禁止使用破折号/减号?
  • 是的,您可以使用破折号。你不能以数字开头。

标签: javascript conditional expression shorthand


【解决方案1】:

假设 .item:last 已定义:

var liid = typeof $('.item:last').attr('id').split('-')[1] != undefined ? $('.item:last').attr('id').split('-')[1] : null;

否则:

var liid = $('.item:last').length > 0 ? $('.item:last').attr('id').split('-')[1] : null;

【讨论】:

  • 不知道为什么......我觉得自己很愚蠢,但为什么我得到一个“$('.item:last').attr('id') is undefined”。 Obv 因为 attr 不存在,但这不是我们要检查的吗?为什么会出错?
  • hm 可能是因为整个 $('.item:last').attr('id') 是未定义的,这个 sn-p 假设至少设置了一个项目,所以在这种情况下你需要拆分它
【解决方案2】:

迈克尔·莫罗泽克是正确的。您不希望整个查找进行两次。

做事

var liid = (typeof($('.item:last').attr('id').split('-')[1]);
liid = typeof(liid) == 'undefined' ? null : liid;

或执行 if 语句。

【讨论】:

    【解决方案3】:
    var liid=$('.item:last').attr('id').split('-')[1];
    liid?'':liid=null;
    

    这仅适用于 $('.item:last').attr('id').split('-')[1] 未定义时等于等于 false 的值以外的值,例如 @ 987654322@或空字符串'';

    【讨论】:

      【解决方案4】:

      var value = $('.item:last').attr('id').split('-')@987654321@;
      (value == undefined) ? liid = value : liid = null;

      该运算符称为三元条件运算符,有时也称为ternary operator。 undefined、null等信息为here

      另外,我将$('.item:last').attr('id').split('-')@987654324@ 存储在一个变量中,这样下次我想获取该值时,机器就不必通过调用多个函数来重新计算它;简单地从内存中读取就足够了。

      【讨论】:

      • 更具体地说,它是条件运算符。它恰好是该语言中唯一的三元运算符(即 3 操作数),但这样引用它并不能真正提供有关运算符或“三元”一词的含义和用法的任何线索”。例如,'=' 是二元运算符。但是,如果您要解释它是什么、它是如何工作的等等,将其称为“赋值运算符”而不是“二元运算符”会更有用。
      • 很抱歉。我一直被教导它被称为三元运算符。我将编辑我的帖子以使其更有意义。
      【解决方案5】:
      var liid = $('.item:last').attr('id').split('-')[1] || null;
      

      这在 JavaScript 中,逻辑或 (||) 运算符的工作方式与您可能习惯的不同。 || 将返回它的左操作数,如果它是“真值”的话。真值是以下之一:

      • 一个对象
      • 任何数字!= 0
      • true
      • 非空字符串

      【讨论】:

      • 我喜欢使用默认运算符来处理这种非常清晰的情况。
      • 不知道为什么......我觉得自己很愚蠢,但为什么我得到一个“$('.item:last').attr('id') is undefined”。 Obv 因为 attr 不存在,但这不是我们要检查的吗?为什么会出错?
      • +1 为最短路径。我不习惯||或者是一种 if 语句。虽然在var e || or e.event 中很常见
      【解决方案6】:

      只需在表达式后面附加|| null 即可将其用作默认值:

      var liid = $('.item:last').attr('id').split('-')[1] || null
      

      【讨论】:

        【解决方案7】:
        var parts= $('.item').last().attr('id').split('-');
        var liid= parts.length>=1? parts[1] : null;
        
        • 尽可能避免使用 :last 和其他 jQuery 特定的非标准选择器,因为它们会导致使用相对较慢的“Sizzle”选择器引擎,而不是使用内置的快速浏览器 querySelectorAll现代浏览器上的方法。优先使用 jQuery 导航功能。

        • 虽然您可以像之前的答案一样使用|| null 来获得更短的表达式,但这有一些可能会或可能不会影响您的警告。就我个人而言,我更愿意明确说明我正在做的测试。

          特别是,空字符串也将是“假”,因此如果 id 恰好是 a--b,则会导致返回 null 值。

        如果您的问题是如何在“JavaScript”中编写它,即。没有 jQuery:

        var els= document.getElementsByClassName('item');
        var parts= els[els.length-1].id.split('-');
        ...
        

        然而,这使用 HTML5 getElementsByClassName 方法,并非所有浏览器都支持该方法,因此您必须为此添加回退支持(请参阅有关此主题的先前问题)。

        【讨论】:

          猜你喜欢
          • 2017-04-11
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          • 1970-01-01
          相关资源
          最近更新 更多