【问题标题】:Why javascript indexOf method give me wrong output [duplicate]为什么javascript indexOf方法给我错误的输出[重复]
【发布时间】:2021-10-05 03:31:25
【问题描述】:

如果我使用“var”来声明数组,如下所示。为什么给我6个

var name = ['Rohan', 'Google', 'Student'];
console.log(name.indexOf('Google'));

输出为 6

如果我使用“let”来声明数组,请给出正确答案

let name = ['Rohan', 'Google', 'Student'];
console.log(name.indexOf('Google'));

输出为 1

【问题讨论】:

  • 你使用let的那个是正确的,你声明变量name是代码的任何其他部分吗? Javascript实际上可以将其拾取然后显示结果
  • 你在其他地方使用变量name吗?
  • var name 指的是window.name。它永远是一个字符串。如果您执行console.log(name),它将显示"Rohan,Google,Student" 而不是['Rohan', 'Google', 'Student']。请检查重复项以获取更多详细信息。
  • 这太奇怪了,我认为问题在于 javascript 将名字 (var) 视为字符串而不是数组,因为当您执行 typeof(name) 时,它会给出 string,这说明为什么 indexof 返回 6(因为 Google 的 G 是第 7 个字符,当您使用 let 声明它时,typeof 返回 Object 这就是您想要的
  • 不,我以前没有,因为在我的 JS 页面中只有牵引线

标签: javascript arrays


【解决方案1】:

不要将变量命名为name,而是将其更改为其他名称,您会得到正确的结果。

var myArray = ['Rohan', 'Google', 'Student'];
console.log(myArray.indexOf('Google'));

原因是有一个名为 name 的全局变量正在显示其结果(如果您检查开发者控制台并搜索 window.name 您可以知道该变量是什么)。

var 在这种情况下具有指向window 对象的全局范围。

如果是let name,我们应该知道let 在上下文中具有本地范围,因此这次名称指向您的数组而不是全局名称。事实上,ES6 引入了letconst 以避免我们在var 中遇到的全局间距问题

【讨论】:

  • 工作炉排。谢谢,但为什么会出现这种情况?
  • 你好@Gagan 为什么来了?意思是:)
  • 我只面临“名称”关键字的问题
  • 如果我使用“namee”或“abc”,它可以工作
  • 如果您在 Windows 机器上,请使用 CTRL+SHIFT+I 或右键单击并检查元素。然后在控制台中,只需键入name 并查看您得到的结果:) 默认名称具有全局范围,在您的情况下,它指向名为window 的全局对象,因此编写window.namename 将指向该字符串或数组,这就是为什么您将索引设为 6。
猜你喜欢
  • 2020-11-29
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2016-09-20
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多