首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript for in

Javascript for in
EN

Stack Overflow用户
提问于 2021-04-30 11:34:13
回答 4查看 67关注 0票数 0

我遇到了一个面试问题,如下所示,但我不知道javascript内部是如何解释以下代码的。

有人能解释一下JS引擎是如何解释的吗?这是否意味着" in“不是数组中包含的值的检查?

代码语言:javascript
运行
复制
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])

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-30 11:44:36

有人能解释一下JS引擎是如何解释的吗?

这些示例中的None使用for-in,如下所示:

代码语言:javascript
运行
复制
for (const key in something)

他们只是使用in operator,这完全是另外一回事(尽管,可能有点相关)。

在这段代码中,有两件事起了作用:

prototypes).

  • Arrays操作符检查左边命名的属性(必要时将名称转换为字符串)是否存在于右侧的对象(对象本身或其任何prototypes).

  • Arrays上)是否是对象。数组索引实际上是一个属性名。

关于第二点,让我们来看看数组[1,2,3,4,5]

代码语言:javascript
运行
复制
+−−−−−−−−−−−−−−−+
|    (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
+−−−−−−−−−−−−−−−+

根据这些资料:

代码语言:javascript
运行
复制
const array = [1,2,3,4,5];
console.log(0 in array);

in0转换为"0",并在array上检查具有该名称的属性。有一个,所以结果是true

代码语言:javascript
运行
复制
const array = [1,2,3,4,5];
console.log("0" in array);

inarray上检查一个名为"0"属性的属性。有一个,所以结果是true

代码语言:javascript
运行
复制
console.log(4 in [1,2,3,4,5]);

in4转换为"4",并在[1,2,3,4,5]上检查具有该名称的属性。有一个,所以结果是true

代码语言:javascript
运行
复制
console.log(4 in [1,2,3,4]);

in4转换为"4",并在[1,2,3,4]上检查具有该名称的属性。不是 one,所以结果是false

上面提到的数字到字符串的转换符合规范,但是JavaScript引擎在可能的情况下优化数组,如果处理这样的优化数组,它可以避免在进行查找之前将数字转换为字符串。

票数 2
EN

Stack Overflow用户

发布于 2021-04-30 11:42:39

在本例中,in关键字是检查右边的值是否具有左侧给定的属性的一种快速方法。

对问题中的例子的解释:

代码语言:javascript
运行
复制
const array = [1,2,3,4,5];

0 in array
true

true是因为array变量包含数组对象,该数组对象包含0索引处的一个元素(值为1 - you可以通过array[0]获得)

代码语言:javascript
运行
复制
"0" in array
true

true是因为array变量包含数组对象,在"0"键处包含一个元素。实际上,JavaScript数组是使用string属性键存储元素的对象。在这种情况下,值1存储为一个"0"属性,也可以通过数字0索引(如前所述)访问该属性。

代码语言:javascript
运行
复制
4 in [1,2,3,4,5]
true

true是因为[1,2,3,4,5]数组在4索引处包含一个元素(值5)。

代码语言:javascript
运行
复制
4 in [1,2,3,4]
false

false是因为[1,2,3,4]数组不包含4索引处的元素。

票数 3
EN

Stack Overflow用户

发布于 2021-04-30 11:37:35

如果您正在进行日志记录(让我输入1、2、3、4),您将看到只记录数组的索引。由于1,2, 3,4只有索引3,4将导致false,其他选项为true。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67333165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档