删除在数组中的 NodeJS 中真正意味着什么
What delete really means in NodeJS in arrays?
阅读这个问题的答案,我知道delete
为元素设置undefined
值。
因此,如果我们有一个数组:a = [1, 2, 3]
(至少)在客户端使用delete a[1]
数组将变得[1, undefined x 1, 3]
在客户端也是如此。
在 NodeJS 中会发生什么?
但是在 NodeJS(服务器端)上测试相同的操作,我得到以下内容:
$ 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
只有我将其设置为未定义?
为什么会这样?
当您对数组条目使用 delete
时,它会从数组中删除该条目。 数组长度不会更改,但数组中的插槽已消失。 如果您尝试查看该插槽的值,它将显示为undefined
尽管删除它与将其设置为 undefined
并不完全相同。 您可以在此处阅读有关删除数组条目的信息(向下滚动到副标题"删除数组元素")。
此参考还解释了在数组条目上使用 delete
与将其设置为 undefined
之间的区别。 这种差异是微妙的,只有在少数情况下才会产生影响。 以下是该文章中的示例:
// 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 ]
显示第二个数组条目丢失(它已完全消失)。
有关delete
运算符在其他情况下的工作方式的完整概述,请参阅 http://perfectionkills.com/understanding-delete/本文。
语言级别的数组索引的工作方式与任何其他属性类似。
当您访问不存在的属性时,将遍历原型链,直到找到结果,如果未找到结果,则返回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
不存在,所以检查原型并找到值15
。
在b
中,因为属性1
存在,所以属性的值(undefined
)只是直接返回。
此外,数组的控制台格式输出通常在环境之间有所不同,但这并没有真正改变实际发生的情况。
- 这个问号在Flow中意味着什么:“;?()=>“无效”;
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 在jQuery中使用$('body').html('')意味着什么
- webkitTransition,这对使用Jquery的CSS-3意味着什么
- Javascript:var%20C与常规var相比意味着什么
- “{}”在下面的函数中这意味着什么
- 两个数组索引一个接一个地放置时意味着什么
- 双括号在javascript中意味着什么以及如何访问它们
- 这个文档语法在MDN中对JavaScript函数意味着什么
- 这个表达式在JavaScript中意味着什么:if(special_validations中的$(element).at
- 可变键控集合在javascript中意味着什么
- 排除符号链接的npm警告意味着什么
- 光骨头在计算机领域意味着什么
- 用JavaScript中的+添加到innerHTML意味着什么
- 跨领域意味着什么?JSONP在这种情况下的立场是什么
- 将变量={}传递到函数中意味着什么
- 在 JavaScript 中,当一个变量用逗号分隔的 3 个不同名称声明时,这意味着什么?
- 当使用JavaScript时“未定义”某些内容时,这意味着什么?
- 使用Javascript实用程序意味着什么
- 是什么让这两个功能分别是“公共”和“私有”,这意味着什么?