Значение ошибки # 1006 не является функцией в str.replace () - PullRequest
0 голосов
/ 21 июня 2011

Я делаю небольшой анализ веб-страницы.У меня есть кусок кода:

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 ]

1 голос
/ 21 июня 2011

просто напоминание: получение 'typeof' из String.replace вернет 'функцию', потому что это именно то, что это ... вам нужно использовать () для выполнения функции и, следовательно, получить возвращенный результат,

replace () = "запустить эту функцию"

replace = имя самой функции.

1 голос
/ 21 июня 2011

Просто любопытно, но что произойдет, если вы сделаете следующее:

//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 таким же.

0 голосов
/ 22 июня 2011

Спасибо всем за ответы!

Решение странное и смешное. Мне пришлось перепечатать слово replace, и оно начало правильно компилироваться. Я только что изменил replaсe на replace.

После того, как я проверил это и ststed, в этих словах есть 2 разных буквы. Последние два в первом слове - русские буквы.

0 голосов
/ 21 июня 2011

Попробуйте изменить.

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

и затем измените все ссылки на

names[i].
change to 
name.

Так как это приведет к приведению имени к String, это поможет вам найти проблему.

Я должен признать, что ваш код довольно небрежный.
Может быть, если вы скажете нам, чего вы пытаетесь достичь, мы сделаем это чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...