字符串的传播运算符

时间:2018-01-07 18:23:44

标签: javascript ecmascript-6 spread-syntax

我在MDN上阅读了传播语法,并且它可以与数组和字符串一起使用:

  

扩展语法允许在可能需要零个或多个参数(用于函数调用)的地方扩展诸如数组表达式或字符串之类的可迭代 - mdn。< / p>

阵列对我来说很清楚。它会将元素扩展为单独的参数 但我没有找到字符串的例子。

那么,使用扩展语法在函数调用中扩展字符串的规则是什么? 如果字符串字符用空格分隔,因为我试过这个并打印3。

&#13;
&#13;
var x = "1 2 3";
console.log(Math.max(...x));
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:5)

正如我们在下面看到的,您的示例实际上是扩展到5个元素,其中2个是空格字符。您还可以在下面看到字符串上的扩展运算符与使用.split('')相同。

&#13;
&#13;
const x = "1 2 3";
console.log([...x]);

console.log(x.split(''));
&#13;
&#13;
&#13;

答案 1 :(得分:4)

空字符串上的Math.max评估为+" "Number(" ")因此0

&#13;
&#13;
let num = "1 2 3";

console.log( Math.max(...num))  // ["1"," ","2"," ","3"] >>> [1,0,2,0,3] >>> 3
&#13;
&#13;
&#13;

因此,直接传播带有数字的字符串是不明智的,因为34 8 9最多会传到9
始终事先按分隔符num.split(" ")拆分。

答案 2 :(得分:1)

传播语法将导致5个元素,其中2个是空格字符:

const x = "1 2 3";
console.log([...x]);

//=> ["1", "", "2", "", "3"]


详细信息:

扩展运算符的结果将是["1", "", "2", "", "3"],其中包含空格字符。

根据此结果, Math.max()将尝试通过将非Number类型转换为Number来查找数组中的最大数字,类似于运行Number("1")进行转换String变成Number。空格字符将转换为数字0,类似于Number("") === 0

因此,您剩下的数字列表如下:[ 1, 0, 2, 0, 3 ],在该数字上 Math.max()将选择3作为最大数字。

答案 3 :(得分:0)

var x = "123";
console.log(Math.max(...x));

// prints 3

...将字符串视为可迭代的,相当于一个字符映射到一个元素的数组。