我一直在尝试使用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>
答案 0 :(得分:1)
var x = ["4"];
具有&#34; 4&#34;的数组。在索引0。
(x[0]);
索引0处的项是一个等于&#34; 4&#34;的字符串。所以输出是:string(4)
(++x[0]);
索引0处的增量项,因此javascript隐式将其转换为数字,然后将其递增,使得输出为:number(5)
(--x[0]);
在索引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 BEFORE 处理当前语句的值。
x++
表示增加处理当前语句的x AFTER 的值。
答案 1 :(得分:0)
//string(4) number(5) number(3) number(3) number(5)
var x = ["4"];
pLog(x[0]); //string(4) //
// ++x[0] convert string "4" to number 4, then add 1
pLog(++x[0]); //number(5)
// ++x[0] increments first, then returns the value 5
pLog(--x[0]); //number(4)
// --x[0] decrements first, then returns the value 4
pLog(x[0]--); //number(4)
// x[0]-- returns the value 4 first, then deduct 1 (the value now is 3!)
pLog(x[0]++); //number(3)
// x[0]++ returns the current value 3 first, then add 1 (the value now is 4!)