为什么这些Array cast和deinc / inc产生错误的数字?

时间:2017-01-22 08:31:47

标签: 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]);     //string(4)

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

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

2 个答案:

答案 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)

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

++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!)