【问题标题】:Object doesn't support this property or method "indexOf"对象不支持此属性或方法“indexOf”
【发布时间】:2015-06-05 17:34:32
【问题描述】:

我在论坛上查看了不同的答案,但找不到解决方案。所以我有一个这样的数组:

var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"];

我有两个变量: var previousRating 和 var currentRating 动态分配有来自 valuesArray 的值之一。

我正在尝试在valuesArray 中查找previousRating 和currentRating 的索引,如下所示:

var prevRatingCounter = valuesArray.indexOf(previousRating.toLowerCase());
var curRatingCouter = valuesArray.indexOf(currentRating.toLowerCase());

previousRating 和 curRating 是字符串值,但我仍然收到错误:

Object doesn't support this property or method

谁能帮我解决这个问题。谢谢。

【问题讨论】:

  • 如果 previousRating/curRating 是字符串,你不应该面对这个问题。不过,你有实时代码吗?将 indexOf 代码放在 if(typeof previousRating === "string") 下
  • 它们是:我做了 Response.Write,它们确实是字符串。
  • 我建议发布您遇到问题的代码块,而不是描述它的点点滴滴,因为从我所见和您所解释的内容来看,它应该可以工作。如果您不想这样做,我建议您在这些行之前使用 console.log() 和 typeof 运算符,以确保之前没有发生强制。
  • 我做了 type of 并且它作为字符串返回。
  • 你是用IE浏览的吗? Why doesn't indexOf work on an array IE8?

标签: asp-classic jscript


【解决方案1】:

正如this answer 中所解释的,服务器端 JScript 用于编写经典 ASP 的 ECMAScript 版本仅为 3.0 - 据我所知,数组的方法 indexOf() 仅在 ECMAScript 5.0 版本中引入,因此它根本不存在。

编写这样的方法并不难,这里有一个工作代码示例:

<%
function IndexOf(arr, item) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == item) {
            return i;
        }
    }
    return -1;
}
%>

然后更改代码以使用它,例如

var prevRatingCounter = IndexOf(valuesArray, previousRating.toLowerCase());

如果你需要在许多不同的文件中使用它,你可以把函数放在一个名为 e.g. “Common.asp”然后将它包含在您需要的任何地方。

【讨论】:

  • 干杯,我想我来得太晚了。 :)
  • @Dijkgraaf 感谢您修复错字,但您的其他编辑有误。反引号用于内联代码,请不要只将它们添加到完整的代码块中。
【解决方案2】:

我认为你的初始化有问题。

这很好用:

    	var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"];

    	var previousRating = "underweight";
    	var currentRating = "neutral";

    	var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"];

    	var prevRatingCounter = valuesArray.indexOf(previousRating.toLowerCase());

    	var curRatingCouter = valuesArray.indexOf(currentRating.toLowerCase());

    	document.write(prevRatingCounter+" "+curRatingCouter);

【讨论】:

  • 我在 '.asp' 文件中有这段代码。这有什么区别吗?
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2011-02-06
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
相关资源
最近更新 更多