【问题标题】:why does javascript parse an array as a string when passed in as an argument or as an index为什么javascript在作为参数或索引传入时将数组解析为字符串
【发布时间】:2020-08-21 18:50:33
【问题描述】:

考虑这段代码

示例 1:

function plus(a) {return a+10}
([1]) // "110"

示例 2:

var arr = [1,2,3,4,5,6,7]
arr[[1]] // 2
arr.splice([1],1);
arr // (6) [1, 3, 4, 5, 6, 7]

有人能解释一下为什么传入一个数组作为参数会被转换为字符串吗? (这就是这里发生的事情)

【问题讨论】:

  • + 运算符不适用于数组。如果要添加到数组中,请使用 name_of_the_array.push(newElement)
  • 您似乎正在调用 [1] 上的 toString
  • 为什么在函数需要一个字符串时传入一个数组作为参数?

标签: javascript arrays arguments


【解决方案1】:

有人可以解释为什么将数组作为参数传递

没有。

直到您尝试在其上使用the addition operator 之前,它都会被视为一个数组。

它达到了步骤 让 rprim 成为? ToPrimitive(rval)并根据those rules进行转换。

以此类推,直到它调用the array's toString method


类似的规则适用于其他示例。

简而言之:当在给定上下文中使用数组毫无意义时,会应用类型转换将其转换为适当的数据类型。

【讨论】:

    【解决方案2】:

    答案 #1 - 你从 array.toString 得到一个字符串,所以你需要转换回数字 - 这里我使用 +

    function plus(a) {return +a+10}
    console.log(plus([1])) 

    第二

    var arr = [1,2,3,4,5,6,7]
    console.log(arr[1]) // 2
    console.log(arr[[1]]) // 2
    
    arr.splice([1],1); // removes the second item 
    console.log(arr) 
    
    var arr = [1,2,3,4,5,6,7]
    arr.splice(1,1);          //  just as if you had done this
    console.log(arr) //  [1, 3, 4, 5, 6, 7]

    【讨论】:

    • 第二个例子呢?
    【解决方案3】:

    + 运算符不适用于数组。它仅适用于数字或字符串。

    由于 javascript 无法将您的数组与 + 运算符一起使用,因此它之前会将其转换为字符串。这就是为什么plus([1])"110"

    如果要添加到数组中,可以使用push方法:

      array.push(newElement);
    

    在第二个示例中,在 splice 内部,您的数组与不支持它的运算符一起使用,因此将其转换为数字。如果您查看MDN definition of splice,您会发现它需要一个数字,而不是一个数组。

    当你想使用拼接时,你不传递一个数组作为第一个参数,你传递要删除的第一个元素的索引。如果要从数组中删除 2,请执行 arr.splice(1,1);

    【讨论】:

    • 第二个例子呢?
    【解决方案4】:

    当添加两种不同的数据类型时,Javascript 会自动输出某种数据类型。

    这里有两个例子:

    2 + 3 // 5
    2 + "hello" // "2hello"
    

    当两个数字相加时,输出一个整数。但是2hello不能数字相加,所以先自动转换成字符串,再追加。

    在您的情况下也会发生同样的事情 - a 仍然是一个数组,但不能将数组添加到数字中。所以两者都转换为字符串然后追加,最终结果是一个字符串。

    您可能正在考虑在数组末尾添加一个值。这是使用:

    a.push(10);
    

    或者,如果您想添加数组中的第一项和10 以获得结果11,请使用:

    return a[0] + 10
    

    但您不能将单个数字添加到整个数组,只能添加到其中一项或数组末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多