Javascript 为什么这些数组转换和deinc/inc生成错误的数字?

Javascript 为什么这些数组转换和deinc/inc生成错误的数字?,javascript,arrays,casting,Javascript,Arrays,Casting,我一直在试验Javascript中的类型转换和数组 我希望输出以下代码 字符串(4) 数字(5) 数字(3) 数字(3) 数字(5) 有人能解释一下为什么没有 <script type="text/javascript"> var counter = 0; function pLog(arg) { console.log(++counter + ": " + typeof(arg) + "(" + arg + ")"); } var x = ["4"]; pLog(x[0

我一直在试验Javascript中的类型转换和数组

我希望输出以下代码

字符串(4) 数字(5) 数字(3) 数字(3) 数字(5)

有人能解释一下为什么没有

<script type="text/javascript">
var counter = 0;
function pLog(arg) {
    console.log(++counter + ": " + typeof(arg) + "(" + arg + ")");
}

var x = ["4"];

pLog(x[0]);     //string(4)

pLog(++x[0]);   //number(5)
pLog(--x[0]);   //number(4)

pLog(x[0]--);   //number(4)
pLog(x[0]++);   //number(3)
</script>

var计数器=0;
函数pLog(arg){
console.log(++counter+”:“+typeof(arg)+”(“+arg+”)”;
}
变量x=[“4”];
pLog(x[0])//字符串(4)
pLog(++x[0])//数字(5)
pLog(-x[0])//数字(4)
pLog(x[0]-)//数字(4)
pLog(x[0]++)//数字(3)
索引0处有“4”的数组

(x[0]);
索引0处的项是一个等于“4”的字符串,因此输出为:
string(4)

索引0处的增量项,以便javascript隐式地将其转换为数字,然后对其进行增量,以便输出为:
number(5)

索引0处的减量项是上一步的5,因此输出为:
number(4)

请注意,在这一步中不再需要隐式转换,因为在我提到的前一步中已经发生了转换

(x[0]--); 
获取索引0处的值,然后将其递减,使输出为:
number(4)

然后执行减量,使索引0处的项现在为3

(x[0]++);
获取索引0处的值,然后将其递增,使输出为:
number(3)

然后执行增量,使索引0处的项现在为4

如果您现在要执行此语句:

console.log(typeof(arg) + "(" + arg + ")");
输出为:
number(4)


我认为混淆来自
++x
x++

++x
表示在处理当前语句之前增加x的值


x++
意味着在处理当前语句之后增加x的值。

因为运算符增量/减量被转换为数字类型,所以您需要了解
++x
x++
之间的区别
++x
在返回之前递增,
x++
在返回值之后递增,所以在记录时可以看到旧值。
(--x[0]);
(x[0]--); 
(x[0]++);
console.log(typeof(arg) + "(" + arg + ")");