我遇到了一个面试问题,如下所示,但我不知道javascript内部是如何解释以下代码的。
有人能解释一下JS引擎是如何解释的吗?这是否意味着" in“不是数组中包含的值的检查?
const array = [1,2,3,4,5];
console.log(0 in array)
console.log("0" in array)
console.log(4 in [1,2,3,4,5])
console.log(4 in [1,2,3,4])
发布于 2021-04-30 11:44:36
有人能解释一下JS引擎是如何解释的吗?
这些示例中的None使用for-in,如下所示:
for (const key in something)他们只是使用in operator,这完全是另外一回事(尽管,可能有点相关)。
在这段代码中,有两件事起了作用:
prototypes).
关于第二点,让我们来看看数组[1,2,3,4,5]
+−−−−−−−−−−−−−−−+
| (array) |
+−−−−−−−−−−−−−−−+
| "length": 5 | Property name is "length", value is 5
| "0": 1 | Property name is "0", value is 1
| "1": 2 |
| "2": 3 |
| "3": 4 |
| "4": 5 |
| [[Prototype]] |−−−−>Array.prototype, which has various methods
+−−−−−−−−−−−−−−−+根据这些资料:
const array = [1,2,3,4,5];
console.log(0 in array);in将0转换为"0",并在array上检查具有该名称的属性。有一个,所以结果是true。
const array = [1,2,3,4,5];
console.log("0" in array);in在array上检查一个名为"0"属性的属性。有一个,所以结果是true。
console.log(4 in [1,2,3,4,5]);in将4转换为"4",并在[1,2,3,4,5]上检查具有该名称的属性。有一个,所以结果是true。
console.log(4 in [1,2,3,4]);in将4转换为"4",并在[1,2,3,4]上检查具有该名称的属性。不是 one,所以结果是false。
上面提到的数字到字符串的转换符合规范,但是JavaScript引擎在可能的情况下优化数组,如果处理这样的优化数组,它可以避免在进行查找之前将数字转换为字符串。
发布于 2021-04-30 11:42:39
在本例中,in关键字是检查右边的值是否具有左侧给定的属性的一种快速方法。
对问题中的例子的解释:
const array = [1,2,3,4,5];
0 in array
truetrue是因为array变量包含数组对象,该数组对象包含0索引处的一个元素(值为1 - you可以通过array[0]获得)
"0" in array
truetrue是因为array变量包含数组对象,在"0"键处包含一个元素。实际上,JavaScript数组是使用string属性键存储元素的对象。在这种情况下,值1存储为一个"0"属性,也可以通过数字0索引(如前所述)访问该属性。
4 in [1,2,3,4,5]
truetrue是因为[1,2,3,4,5]数组在4索引处包含一个元素(值5)。
4 in [1,2,3,4]
falsefalse是因为[1,2,3,4]数组不包含4索引处的元素。
发布于 2021-04-30 11:37:35
如果您正在进行日志记录(让我输入1、2、3、4),您将看到只记录数组的索引。由于1,2, 3,4只有索引3,4将导致false,其他选项为true。
https://stackoverflow.com/questions/67333165
复制相似问题