javascript array.length函数的奇怪结果

javascript array.length函数的奇怪结果,javascript,jquery,Javascript,Jquery,我有一段JavaScript代码,它循环遍历表单元素并构建一个对象。 我混合了HTML输入字段和ASP.NET输入字段。ASP.NET将字段的ID更改为xxxxx _yyyy_ID的形式,因此我尝试使用split函数提取原始ID // Iterate over all the text fields and build an object $(':text').each(function () { var tokens = this.id.split("_"); if

我有一段JavaScript代码,它循环遍历表单元素并构建一个对象。 我混合了HTML输入字段和ASP.NET输入字段。ASP.NET将字段的ID更改为xxxxx _yyyy_ID的形式,因此我尝试使用split函数提取原始ID

 // Iterate over all the text fields and build an object
 $(':text').each(function () {

     var tokens = this.id.split("_");
     if (tokens.length = 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
 });
在上面的代码中,第一个id是ctl00\u ContentPlaceHolderCol1\u forenameField,因此运行tokens.length=3代码。 在第二次迭代中,id是forenameField2,所以我希望tokens.length是1,但实际上是3。else语句永远不会运行

这可能很简单,但我无法解决。如果我检查tokens数组,它在第二次迭代中只有1个元素。我还尝试在每次迭代后将array.length设置为0

感谢您的帮助。

请更正此问题:

== instead of =. === is more better


     if (tokens.length == 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
更正此错误:

== instead of =. === is more better


     if (tokens.length == 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
发件人:

致:

发件人:

致:


将您的
=3
更改为
==3

此时,您每次都在覆盖
标记.length


注意:
==
优于
==
,因为这是一个精确的相等检查。两个等于版本将尝试在比较之前将两个操作数强制转换为相同的类型,即1。没有必要,2。效率低,3。有时容易出错。

=3
更改为
==3

此时,您每次都在覆盖
标记.length


注意:
==
优于
==
,因为这是一个精确的相等检查。两个等于版本将尝试在比较之前将两个操作数强制转换为相同的类型,即1。没有必要,2。效率低,3。有时容易出错。

这就是为什么在测试时总是将常量放在第一位的原因。如果您忘记了比较符号,它将抛出一个错误:

if( 3 = tokens.length ) // throws an error
if( 3 == tokens.length ) // ok
if( 3 === tokens.length) // ok

这就是为什么在测试时总是将常数放在第一位的原因。如果您忘记了比较符号,它将抛出一个错误:

if( 3 = tokens.length ) // throws an error
if( 3 == tokens.length ) // ok
if( 3 === tokens.length) // ok

=
是赋值-你的意思是
=
(或者更好的是
=
=
是赋值-你的意思是
=
(或者更好的是
==
)有些人建议使用左边的常量
(3==tokens.length)
,因为如果你忘记了
=
,它就会变成编译错误。我不喜欢它,但它有道理。有些人建议使用左边的常量
(3==tokens.length)
,因为如果忘记了
=
,它将成为编译错误。我不喜欢,但有道理。