忽略括号外的操作
var x = 0;
var arr = [4,9,2];
arr[x] = (++x)-1;
document.write(arr[x]);//9
//为什么js忽略括号外的减号?为什么它不是4?忽略括号外的操作
这(++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]
@PaulFitzgerald请参阅我的更新。谢谢 – Christos
但是为什么? arr [x]不应该等于整个操作的结果吗? – hawkeye871
@ hawkeye871很抱歉,我没有收到您的评论?你说'arr [x]'等于整个操作的结果是什么意思? – Christos
你写
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
@Tom感谢您的编辑 – user13377331
thx。似乎我知道了。对我来说有点棘手。 – hawkeye871
@ hawkeye871没问题,乐意帮忙 – user13377331
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]
请不要使用这种风格。它容易出错并且难以阅读。 –