gpt4 book ai didi

JavaScript «检测 未定义»

转载 作者:行者123 更新时间:2023-12-03 01:33:01 25 4
gpt4 key购买 nike

如何检测数组中的“空槽”? «空槽»不是“未定义”!

<script type="text/javascript">
const has = [1, 2, /*empty slot*/, 4, undefined, 6, /*empty slot*/];
console.log(has[2] === undefined); // true - but, is <empty slot>!!!
console.log(has[4] === undefined); // true - needle.
</script>

谢谢!)

最佳答案

您可以使用 in 运算符或 hasOwnProperty 方法:

const has = [1, 2, /*empty slot*/, 4, undefined, 6, /*empty slot*/];
console.log(2 in has); // No property called 2
console.log(has.hasOwnProperty(2)); // No property called 2
console.log(4 in has); // There is one called 4
console.log(has.hasOwnProperty(4)); // There is one called 4

in检查对象及其原型(prototype)的属性。 hasOwnProperty仅检查对象本身,而不检查其原型(prototype)。由于 Array.prototype 没有定义任何名称如 2 和 4 的属性(并且永远不会),因此两者都有效。 (其中一个会比另一个更快,但是不同的 JavaScript 引擎可能会有所不同,而且无论如何这都不重要......)

这些是根据对象而不是特定的数组来定义的,但是您可以在这里使用它们,因为 JavaScript 中的标准数组是对象,它们只是对一类属性(其属性的类)进行特殊处理。名称是为数组索引定义的形式的字符串[请参阅spec]),是一个特殊的length属性,并且继承自Array.prototype。更多内容请参见我的博文A Myth of Arrays .

如果您想在给定索引n的情况下查找下一个空槽,则:

var emptySlot = -1;
while (n < array.length) {
if (!(n in array)) { // or `if (!array.hasOwnProperty(n)) {`
emptySlot = n;
break;
}
++n;
}

关于JavaScript «检测 <N 空槽> 未定义»,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com