2016-12-17 65 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]