JavaScript:shift/unshift操作后数组显示异常及添加疑问求助
问题描述
我了解shift和unshift用于在数组开头移除或添加元素,以下是我的JavaScript代码:
var arx = ["Plumber",12,14,15,[18,"Try"]]; console.log("The array is :- ",arx); arx.shift(); // SHIFT removes element from beginning console.log("The array after shift operation is :- "+arx); arx.unshift(11,"Try",["ABC",34,"GTH"],999); //////////// LINE 1 console.log("The array array unshift operation is :- "+arx);
执行后,我无法理解为何shift操作后,数组输出时没有方括号,原本的嵌套数组[18,"Try"]也被拆分为两个独立元素;同时unshift操作中,第1行传入的["ABC",34,"GTH"]没有以数组形式添加,而是被拆分显示。请问我哪里出错了?
问题原因与解决办法
问题和shift、unshift本身没关系,完全是用+拼接字符串和数组时的自动转换搞的鬼:
- 当你写
console.log("xxx" + arx)时,JS会自动调用数组的toString()方法,把数组转换成逗号分隔的字符串——嵌套数组也会被递归转换,所以方括号消失,[18,"Try"]变成了18,Try。 - 你第一行
console.log用逗号分隔参数,JS会直接输出数组的原始结构,所以能正常显示。
改完就能正常显示
把输出里的+换成逗号即可:
var arx = ["Plumber",12,14,15,[18,"Try"]]; console.log("The array is :- ",arx); arx.shift(); console.log("The array after shift operation is :- ", arx); arx.unshift(11,"Try",["ABC",34,"GTH"],999); console.log("The array after unshift operation is :- ", arx);
运行后你会看到:
- shift后的数组保留方括号,嵌套数组
[18,"Try"]不会被拆分 - unshift添加的
["ABC",34,"GTH"]以完整嵌套数组形式存在,不会被拆成单个元素
另外补充:unshift其实已经正确把嵌套数组加入原数组了,只是你之前用字符串拼接输出看不到它的真实结构。你可以单独执行console.log(arx[3]),就能看到这个嵌套数组本身。
内容的提问来源于stack exchange,提问作者Brijesh
相关产品推荐
相关产品推荐

