什么删除真的意味着在数组中的NodeJS?
阅读这个问题的答案我明白, delete
设置元素的undefined
值。
所以,如果我们有一个数组: a = [1, 2, 3]
(至less)在客户端使用delete a[1]
,数组将变为[1, undefined x 1, 3]
客户端 。
在NodeJS中会发生什么?
但在NodeJS(服务器端)上testing相同的操作我得到以下内容:
$ node > a = [1, 2, 3] [ 1, 2, 3 ] > delete a[1] true > a [ 1, , 3 ] > a[1] = undefined undefined > a [ 1, undefined, 3 ] >
所以, a[1] = undefined
设置未定义的值。 但是这两个逗号之间的空格是什么意思呢?( [1, , 3]
)? delete
吧! 为什么?
我想空间意味着undefined
,但为什么它不显示为undefined
只是我把它设置为undefined?
为什么发生这种情况?
在数组条目上使用delete
时,会从数组中删除该条目。 数组长度没有改变,但是数组中的那个槽没有了。 如果您试图查看该插槽的值,它将显示为undefined
但删除它与将其设置为undefined
不完全相同。 您可以阅读有关在此删除数组条目(向下滚动到字幕“删除数组元素”)。
这个引用也解释了在数组条目中使用delete
与将其设置为undefined
的区别。 差别是微妙的,只有在less数情况下才会有所不同。 下面是该文章的一个例子:
// using delete var trees = ["redwood","bay","cedar","oak","maple"]; delete trees[3]; if (3 in trees) { // this does not get executed } // setting to undefined var trees = ["redwood","bay","cedar","oak","maple"]; trees[3]=undefined; if (3 in trees) { // this gets executed }
所以,这个控制台输出:
[ 1, , 3 ]
向您显示第二个数组项目丢失(完全消失)。
请参阅本文http://perfectionkills.com/understanding-delete/ ,了解delete
操作符在其他情况下的工作原理。
在语言级别的数组索引像任何其他属性一样工作。
当你访问一个不在那里的属性时,proto链会一直走到find一个结果,否则返回undefined
。 但是你也可以使用undefined
作为正常值。
可能有很大的差异,例如:
Array.prototype[1] = 15; var a = [1, 2, 3]; delete a[1]; //protip: the above can be written as `var a = [1,,3]` var b = [1, undefined, 3]; //Logs 15 and undefined console.log(a[1], b[1]);
在a
,因为属性1
不存在 ,原型被检查并且find值15
。
在b
,因为属性1
在那里 ,属性的值( undefined
)就直接返回。
此外,arrays的控制台格式化输出在环境之间通常是不同的,但这并不能真正改变实际发生的情况。