使用javascript array.length函数的奇怪结果

时间:2012-04-30 16:11:35

标签: 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 (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_ContentPlaceHolderCol1_forenameField,因此运行tokens.length = 3代码。 在第二次迭代中,id是forenameField2所以我希望tokens.length为1,但它实际上是3. else语句永远不会运行。

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

任何帮助表示感谢。

4 个答案:

答案 0 :(得分:5)

纠正这个:

== 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;
     }

答案 1 :(得分:2)

将您的= 3更改为=== 3

目前你每次都覆盖tokens.length

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

答案 2 :(得分:2)

这就是为什么你应该在测试时始终把常量放在第一位。如果您忘记了比较符号,则会抛出错误:

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

答案 3 :(得分:1)

从:

if (tokens.length = 3) {

为:

if (tokens.length == 3) {