您好,登录后才能下订单哦!
这篇文章给大家介绍JavaScript中如何使用扩展运算符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
个人对…常用方法的理解
…作为扩展运算符
这里指的扩展是针对数组或字符串或伪数组(就是类似于数组这样的可以用下标将每一项取出来,并且有总体长度属性的数据,以下简称为可遍历对象)的扩展,代表的含义是将数组中的每一项取出来,并用,进行分隔(当使用的时候是这样,如果单独打印的话是用空格分隔)。
…可以将一个一维数组进行展开,即只能去掉最外面一层的[];
他的结果就是数组被去掉[]的结果,不是字符串也不是数组也不是别的东西,所以按照它逗号分隔的方式,可以将它作为函数的形参传递也可以外面再套一个[],当做数组作为一个函数的return,但是不能直接return,可以用console输出。
<script> let arr = [ 5, "str", [1,2,3], ["hello","world"], ]; function fn(arr){ console.log(...arr); return [...arr] } function fo(...arr){ console.log(arr); } // function foo(arr){ // return ...arr; // Expression expected. // } console.log(fn(arr)); // 5 "str" (3) [1, 2, 3] (2) ["hello", "world"] // (4) [5, "str", Array(3), Array(2)] // 外面的[]去掉了,但是里面的[1,2,3]、["hello","world"]的[]没有去掉 </script>
剩余运算符的意思就是我不知道这个参数总共有多少个,我用…表示剩余的,同样它只适用于数组。
而且这两种方法得到的结果都是一个数组,而不是数组去掉[]。
主要有以下两种方法:
第一种: 所有的参数都是未知的,不知道传几个。
第二种: 有一个或多个已知参数,其余参数未知。
// 第一种所有参数都未知function aa(...arr){ console.log(arr);}aa(5,"sss",22) // (3) [5, "sss", 22] => 结果是一个数组// 第二种,有两个已知参数function ff(a,b,...arr){ console.log(arr)}ff(2,3,"str","111") // (2) ["str", "111"] => 结果是一个数组
可以用str.split("")也可以用[…str]
由于他可以将可遍历对象用数组去掉[]的方法显示出来,而且可以对伪数组使用,所以很好理解对伪数组使用后将伪数组的形式转变后,在加上[]就是真数组了,可以调用真数组的方法。 => […arr.]
由于它是对一个可遍历的对象使用循环过来的,所以它不会改变原数组,会进行一个浅克隆的操作,因此可以用于数组的浅拷贝。 => […arr]
<script> // 简单的二维数组(一个数组里面又套了一个数组 => 二维) let arr = [ 5, "str", [1,2,3], ["hello","world"], ]; // 三维数组(一个数组里面套一个数组,里面又套一个数组) let arr1 = [ 5, "str", [ 1,2,3, ["ccc","dddd"] ], ["hello","world"], ]; function flatten(arr){ return [].concat(...arr); } function flatten1(arr){ return [].concat(...arr.map(x => Array.isArray(x) ? flatten1(x) : x)); } console.log(flatten(arr)); // (7) [5, "str", 1, 2, 3, "hello", "world"] console.log(flatten1(arr)); // (7) [5, "str", 1, 2, 3, "hello", "world"] console.log(flatten(arr1)); // (8) [5, "str", 1, 2, 3, Array(2), "hello", "world"] console.log(flatten1(arr1)); // (9) [5, "str", 1, 2, 3, "ccc", "dddd", "hello", "world"] </script>
关于JavaScript中如何使用扩展运算符就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。