错误#1006值不是str.replace()中的函数

时间:2011-06-21 16:37:32

标签: actionscript-3 string replace

我正在对网页进行小规模解析。 我有一段代码:

var names:Array = pageText.match(namePattern);
for (i=0; names.length>i; i++)
{
    if (names[i].search("show") != -1)
    {
       names[i] = names[i].slice(names[i].search(additionalNamePattern) + 2,-4);
    }
    trace((names[i].toString()==names[i] ? 'true': 'false'),typeof names[i], ': ', names[i]);
    //Gives: true string :  <span class="title">Dancing Queen </span><span class="

    trace(typeof names[i].replace , ': ',names[i].replace);
    //Gives: function :  function Function() {}

    if (names[i])
    {
        trace(names[i].replaсe("a","b")); 
        //Gives Error TypeError: Error #1006: value is not a function.
    }

显然,问题是为什么会引起错误。我已经尝试了

"abc".replace("b", "c")

它有效。

trace(typeof "abc".replace , ': ',"abc".replace);

给出

function : function Function() {}

4 个答案:

答案 0 :(得分:1)

很好奇,但是如果你做了以下事情会发生什么:

//place this at the top:
import flash.utils.getQualifiedClassName;

// this line will make sure that everything is a String (req's Flash 10.x)
var names:Vector.<String> = Vector.<String>(pageText.match(namePattern));

trace(getQualifiedClassName(names[i]))
if (names[i])
{
     trace(String(names[i]).replaсe("a","b")); 
}

我知道,那些不应该重要,但AS3有一些怪癖。我在AS2中看到了一些类似的行为,虽然这些行为是由我修复的,但我想知道AS3是否会不一样。

答案 1 :(得分:1)

只是提醒一下:获取String.replace的'typeof'将返回'function',因为它就是这样......你需要使用()来执行函数,从而得到返回的结果。

replace()=“运行此功能”

replace =函数本身的名称。

答案 2 :(得分:0)

尝试更改。

for (i=0; names.length>i; i++){
to 
for each( var name:String in names ){

然后将所有引用更改为

names[i].
change to 
name.

由于这会将演员姓名键入String,因此可以帮助您找到问题
我不得不承认你的代码很邋。 也许如果你告诉我们你想要实现的目标,我们会更清洁。

答案 3 :(得分:0)

谢谢大家的答案!

解决方案很奇怪也很有趣。我不得不重新打印replace这个词,它开始正确编译。我刚刚将replaсe更改为replace

之后我检查了它并且说了这些话中有两个不同的字母。第一个单词的最后两个是俄文字母。