var a = [1,4,5];
var e = a.length--;
此处e
变量将包含5.但如果我这样做:
var e = a.length-=1;
这里e
将包含2个元素数组。
那么第一个是模拟pop()数组方法的语言'技巧'吗?
在语言语法中:
a--
或
a-=1
在语义上是一样的。
答案 0 :(得分:5)
var a = [1, 4, 5];
var e = a.length--;
与
相同var a = [1, 4, 5];
var e = a.length;
a.length = a.length - 1;
,而
var a = [1, 4, 5];
var e = a.length -= 1;
与
相同var a = [1, 4, 5];
a.length = a.length - 1;
var e = a.length;
和
var a = [1, 4, 5];
var e = --a.length;
换句话说:x--在递减之前返回值,而--x(和x - = 1)在递减之后返回值。所有这些代码片段都会弹出数组a的最后一个元素。
请注意,在第一个示例e = a.length--
中,e的值为3,而不是5,因此不与a.pop()
相同。
答案 1 :(得分:2)
这是一个基本的误解:如果您评估a++
,将评估a,然后递增,而++a
或a+=1
将先递增,然后评估。
在大多数情况下,最好以更冗长的方式编写这些类型的语句,因为它们很快就会导致对正在发生的事情的混淆而没有获得任何东西(大多数编译器/解释器无论如何都会对此进行优化)。
答案 2 :(得分:1)
这不是我得到的。
相反,我得到了预期的结果。第一个例子中e = 3,第二个例子中e = 2。
在第一种情况下,a.length最初是3(因为javascript数组是稀疏的)。使用后递减,这个值(3)首先被赋值给e,然后a.length递减(实际上这很有可能)。
在第二种情况下,从3减去1使其成为2,然后将其分配给e。
所以我认为没有什么花哨的,真的。
答案 3 :(得分:1)
var a = [1,4,5];
var e = a.length--;
e将不包含5.它将包含3.
- postix减量运算符在这里没有任何区别。 a.length
是3.第二个语句翻译为:
鉴于:
var a = [1,4,5];
var e = a.length-=1;
这里e 将包含2。
第二个陈述翻译为
无论如何,你正在弄乱你不应该做的array.length
财产。它会导致难以追踪的那种令人讨厌的错误,因为它是你可能没有想到或想到的副作用的结果。
答案 4 :(得分:0)
哦,是的,我从书中看到了这一点:第112页的面向对象的Javascript
push()方法在数组末尾附加一个新元素。 pop()方法删除最后一个元素。 a.push('new')就像[a.length] ='new'和a.pop()和a.length一样 - 。
并且没有尝试我发布问题的代码!!!
对不起。所以我认为这是一个书错误,因为pop()返回最后一个元素 a.length--收缩数组但不返回元素但是数组lenght -1