You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:36:23