Javascript jQuery:val()是否足够快,可以重复使用,还是将值放入变量中更好

Javascript jQuery:val()是否足够快,可以重复使用,还是将值放入变量中更好,javascript,jquery,Javascript,Jquery,如果您正在执行以下操作: var i = $('input[@name=some_field]'); if (i.val() != '' && !(i.val() >=1 && i.val() <= 36) || i.val() == 'OT')) { i.focus(); } 在if语句中首先使用value,然后使用value,如: var i = $('input[@name=some_field]'); var value = i.v

如果您正在执行以下操作:

var i = $('input[@name=some_field]');
if (i.val() != '' && !(i.val() >=1 && i.val() <= 36) || i.val() == 'OT')) {
     i.focus();
}
在if语句中首先使用value,然后使用value,如:

var i = $('input[@name=some_field]');
var value = i.val();
if (value != '' && !(value >=1 && value <= 36) || value == 'OT')) {
     i.focus();
}
var i=$('input[@name=some_field]);
var值=i.val();

如果(value!=''&&!(value>=1&&value),那么调用jQuery不会对性能造成影响

它比本机DOM.value调用慢,因为它会导致额外函数调用的额外开销以及函数内部发生的事情-。除非您这样做数百次,否则您不会注意到它


我会选择你认为更具可读性的方式,然后继续。一种或另一种方式,并坚持在你的代码中!我个人只会在每次需要时调用
val
,并保存额外的赋值行。

这不一定是一个jQuery问题,但它适用于大多数编程语言。事实上,有一个这不仅仅是性能问题

需要记住的一点是,如果存储值,则在后续代码的执行过程中它不可能更改。大多数情况下,这是您所期望和想要的。但在某些情况下,对val()的调用也可能将返回一个不同的值,特别是当您正在循环并执行一些需要花费大量时间的操作时


在您的特定示例中,发生这种情况的可能性非常低,因为这只是几个调用,而不是在循环构造中。考虑到只有几个调用,性能可能不会是主要问题。但这一点的理论仍然存在——如果您想保证值不会更改,请将其放入变量中。Since它还为您提供了最佳性能考虑,我认为这在大多数情况下都是最佳实践。

如果查看jQuery代码,您将了解执行val()时发生的所有事情函数,所以我建议将其分配给变量,而不要重复执行它。

当在没有任何参数的情况下调用时,我不认为val()会比直接访问value属性慢很多。根据我对jQuery源代码的阅读,基本上所有的val()方法所做的是检查元素是否为select,如果不是,则只返回value属性的内容(删除\r字符)。函数调用会有一些开销,字符串替换会有一些开销,但我读到的任何内容都表明开销会很大


如果你真的很担心,试着在大量的迭代中对有问题的代码进行基准测试。否则,只需选择在你看来最干净的方法,然后去做它。

一般来说,我会说,永远不要多次调用函数来获得相同的值。只要通过avoi,你的代码就会更可读、更高效减少函数调用开销。

我完全同意-回答得很好!Javascript代码不是基本上是单线程执行的吗?因此,修改中间循环的机会实际上是零?在这个特定示例中,您是对的,但是循环中可能有影响函数返回值的代码
var i = $('input[@name=some_field]');
var value = i.val();
if (value != '' && !(value >=1 && value <= 36) || value == 'OT')) {
     i.focus();
}