2016-12-17 60 views
0
var x = 0; 

var arr = [4,9,2]; 

arr[x] = (++x)-1; 

document.write(arr[x]);//9 

//为什么js忽略括号外的减号?为什么它不是4?忽略括号外的操作

+0

请不要使用这种风格。它容易出错并且难以阅读。 –

回答

2

(++x)-1将导致0及本声明的评估后x是1,因为你已经加1,并将其分配的0

所以这arr[x]值(在声明document.write(arr[x]);)实际上是arr[1]arr[1]被分配9.

值关于分配:

arr[x] = (++x)-1; 

现在数组(索引0)的第一个元素的值将被分配值0。这就是为什么如果打印ARR你会得到下面的输出:

[0,9,2] 
+0

@PaulFitzgerald请参阅我的更新。谢谢 – Christos

+1

但是为什么? arr [x]不应该等于整个操作的结果吗? – hawkeye871

+1

@ hawkeye871很抱歉,我没有收到您的评论?你说'arr [x]'等于整个操作的结果是什么意思? – Christos

1

你写

arr[x] // which is arr[0] 
(++x)-1; // 1-1 = 0, x = 1 

那么你就写出来

document.write(arr[x]); //arr[1] which is 9 

为什么JS忽略负括号内的那外面?

所以不,js不会忽略减号。也许尝试使用数组来理解前缀++运算符wtthout,因为在这种情况下他们会让你感到困惑。

实施例:

var x = 0, y = 0; 
y = (++x) - 1; 
document.write("x: " +x + " y: " y); //x == 1, y == 0 
+0

@Tom感谢您的编辑 – user13377331

+0

thx。似乎我知道了。对我来说有点棘手。 – hawkeye871

+0

@ hawkeye871没问题,乐意帮忙 – user13377331

0

基本上,这与前缀increment

++x - 1 

是一样的使用x的具有后缀增量。

x++ 
0

arr[0] = 0,这里x由1所以递增,x = 1,(1)-1 = 0

arr[1]将打印9因为x = 1,则与访问该阵列 元件索引1

document.write(arr)它将打印[0,9,2],因为数组的第一个 元素将分配值0。

var x = 0; 

var arr = [4,9,2]; 

arr[x] = (++x)-1;  
// x would be 1 after the evaluation of this statement. 

//document.write(x);// it will print 1 

document.write(arr[x]);// arr[1] it will print 9 

//document.write(arr);// it will print [0,9,2]