0

if $('.item:last').attr('id').split('-')[1]is notundefined var liid等于 that,如果是undefinedthen 它等于null

4

7 回答 7

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

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

  • 一个东西
  • 任何数字!= 0
  • true
  • 非空字符串
于 2010-07-12T19:54:59.307 回答
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;
于 2010-07-12T19:30:17.797 回答
2
var parts= $('.item').last().attr('id').split('-');
var liid= parts.length>=1? parts[1] : null;
  • 尽可能避免:last和其他特定于 jQuery 的非标准选择器,因为它们会导致使用相对较慢的“Sizzle”选择器引擎,而不是querySelectorAll现代浏览器上的快速浏览器内置方法。优先使用 jQuery 导航功能。

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

    特别是,空字符串也将是 'falsy' ,因此如果恰好是,则会导致null返回值。ida--b

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

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

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

于 2010-07-12T20:04:55.360 回答
1

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

做就是了

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

或执行 if 语句。

于 2010-07-12T19:37:40.093 回答
1

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

该运算符称为三元条件运算符,或者有时称为三元运算符。关于 undefined、null 等的信息在这里

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

于 2010-07-12T19:50:43.573 回答
0
var liid=$('.item:last').attr('id').split('-')[1];
liid?'':liid=null;

但是,这仅在 $('.item:last').attr('id').split('-')[1] 未定义时等于等于 false 的值以外的值(例如0空字符串)时才有效'';

于 2010-07-12T19:42:22.777 回答
0

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

var liid = $('.item:last').attr('id').split('-')[1] || null
于 2010-07-12T19:55:28.830 回答