if $('.item:last').attr('id').split('-')[1]
is notundefined
var liid
等于 that,如果是undefined
then 它等于null
7 回答
var liid = $('.item:last').attr('id').split('-')[1] || null;
这在 JavaScript 中,逻辑或 ( ||
) 运算符的工作方式与您可能习惯的不同。 ||
如果它是“真值”,将返回它的左操作数。真值是以下之一:
- 一个东西
- 任何数字!= 0
true
- 非空字符串
假设 .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;
var parts= $('.item').last().attr('id').split('-');
var liid= parts.length>=1? parts[1] : null;
尽可能避免
:last
和其他特定于 jQuery 的非标准选择器,因为它们会导致使用相对较慢的“Sizzle”选择器引擎,而不是querySelectorAll
现代浏览器上的快速浏览器内置方法。优先使用 jQuery 导航功能。虽然您可以使用
|| null
前面的答案来获得更短的表达式,但这有可能会或可能不会影响您的警告。就我个人而言,我更喜欢明确说明我正在做的测试。特别是,空字符串也将是 'falsy' ,因此如果恰好是,则会导致
null
返回值。id
a--b
如果您的问题是如何在“JavaScript”中编写它,即。没有 jQuery:
var els= document.getElementsByClassName('item');
var parts= els[els.length-1].id.split('-');
...
但是,这使用了 HTML5getElementsByClassName
方法,并非所有浏览器都支持该方法,因此您必须为此添加回退支持(请参阅有关此主题的先前问题)。
迈克尔·姆罗泽克是正确的。您不想进行两次整个查找。
做就是了
var liid = (typeof($('.item:last').attr('id').split('-')[1]);
liid = typeof(liid) == 'undefined' ? null : liid;
或执行 if 语句。
var liid=$('.item:last').attr('id').split('-')[1];
liid?'':liid=null;
但是,这仅在 $('.item:last').attr('id').split('-')[1] 未定义时等于等于 false 的值以外的值(例如0
空字符串)时才有效''
;
|| null
只需在表达式后面附加即可将其用作默认值:
var liid = $('.item:last').attr('id').split('-')[1] || null