在JavaScript中编写此代码的最短方式

时间:2010-07-12 19:27:22

标签: javascript conditional expression shorthand

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

7 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

假设.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;

答案 2 :(得分:2)

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

  • 虽然您可以像以前的答案一样使用querySelectorAll来获得更短的表达,但这有一些警告可能会或可能不会影响您。我个人更喜欢明确我正在做什么测试。

    特别是,空字符串也是'falsy',因此如果|| null恰好是null,则会返回id值。

    < / LI>

如果你的问题是如何用'JavaScript'来写,即。没有jQuery:

a--b

然而,这使用了HTML5 var els= document.getElementsByClassName('item'); var parts= els[els.length-1].id.split('-'); ... 方法,并非所有浏览器都支持该方法,因此您必须为此添加后备支持(请参阅此主题的前几个问题)。

答案 3 :(得分:1)

迈克尔·莫泽克是对的。您不希望两次完成整个查找。

只做

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

或做if语句。

答案 4 :(得分:1)

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

运算符称为三元条件运算符,有时也称为ternary operator。关于undefined,null等的信息是here

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

答案 5 :(得分:0)

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

只有当$('。item:last')。attr('id')。split(' - ')[1]未定义时等于除了等于false的值之外的其他内容,例如{ {1}}或空字符串0;

答案 6 :(得分:0)

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

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