Javascript 为什么这些数组转换和deinc/inc生成错误的数字?
我一直在试验Javascript中的类型转换和数组 我希望输出以下代码 字符串(4) 数字(5) 数字(3) 数字(3) 数字(5) 有人能解释一下为什么没有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
<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 + ")");