【问题标题】:.push Is Not a Function.push 不是函数
【发布时间】:2016-11-08 19:16:54
【问题描述】:
var name = [];

function logger(names) {
  if (typeof names === "string") {
    console.log(names);
  } else if (typeof names === "object") {
    for (var name in names) {
      console.log(names.names);
    }
  }
}

function namesIn(namesData, functionality) {
  name.push(namesData);
  functionality(namesData);
}

namesIn({
  names: ["Michael", "Sally", "Billy", "Dinesh", "Zach"]
}, logger);

当我在 chrome 中查看我的日志时,我看到了这个令人费解的特定错误消息:“TypeError: name.push is not a function”。

有什么问题?

【问题讨论】:

  • Using the variable "name" doesn't work with a JS object  的可能重复项— 将代码第一行中的 name 重命名为其他名称,并在 name.push 中相应地进行更改。
  • 与声明为全局变量name的变量有关。 name 是返回 windows 名称的 window 对象的受限属性。因此错误。请参阅作为副本链接的问题以获得更好的解释

标签: javascript google-chrome exception-handling typeerror


【解决方案1】:

因为您在 for 循环中重新声明了名称。而且name现在是一个String,不支持.push。

如果您在 for 循环中使用 let name 而不是 var name,它应该可以工作。

【讨论】:

  • 如果你将for循环中的变量重命名为别的东西,它仍然不起作用
  • 我已经修复了这个错误。名称中被覆盖的 var 很重要。但是,.push 确实支持字符串!我会将固定代码放在我的答案中。谢谢!
  • @Crayon 我的意思是 Array.prototype.push 确实支持添加字符串,但 String.prototype.push 不存在。不管怎样,很高兴你修好了!
【解决方案2】:
var names = [];
function logger(names){
  if( typeof names ==="string"){
         console.log(names);
    }
  else if( typeof names ==="object"){
    for(var name in names){
      console.log(names.names);
      }
    }
  }

 function namesIn(namesData, functionality){
    names.push(namesData);
    functionality(namesData);
  }

 namesIn({names:["Michael","Sally","Billy","Dinesh","Zach"]},logger);

问题的根源是在 for 循环中,我重新声明了我的 name 变量!

我还将变量名称更改为便于阅读的名称。

【讨论】:

猜你喜欢
  • 2019-12-11
  • 2021-05-17
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2019-08-08
  • 1970-01-01
相关资源
最近更新 更多