JQuery каждый для коллекции строк - PullRequest
0 голосов
/ 26 января 2012

Приведенный ниже код вызывает исключение в Firefox:

 $(function(){
        $(["one","two","three"]).each(function(){
            if(this == "one")
                $("div#msg").html(this);
        });
    });

исключение таково:

Не удалось преобразовать аргумент JavaScript arg 0 [nsIDOMDocumentFragment.appendChild]

Тем не менее, если я изменяю код и использую this.toString () следующим образом, он работает:

$(function(){
    $(["one","two","three"]).each(function(){
        if(this == "one")
            $("div#msg").html(this.toString());
    });
});

Если «this» является строкой, зачем мне нужно делать toString ()?Есть ли нюанс javaScript, который мне не хватает, или я просто дебил?Пожалуйста, скажите мне, что это нюанс.

Ответы [ 3 ]

1 голос
/ 26 января 2012

если вы попробуете это:

 $(function(){
        $(["one","two","three"]).each(function(){
            console.log(this);
            console.log(this.toString());
        });
    });

вы увидите в консоли, что this и this.toString() на самом деле не одно и то же.Казалось бы, this является объектом String, а this.toString() является действительной строкой.

1 голос
/ 26 января 2012

Различие между строковыми примитивами и объектами String JavaScript автоматически преобразует примитивы и объекты String, так что можно использовать методы объекта String для примитивных строк.В тех случаях, когда метод должен вызываться для примитивной строки или происходит поиск свойства, JavaScript автоматически переносит строковый примитив и вызывает метод или выполняет поиск свойства.

~ От MDN Подробнее

$("div#msg").html("one"); //works

$("div#msg").html(new String("one")); // doesnt work

Например:

try {         
    $("div#msg").html(new String("one"));
} catch (e) {
    $("div#msg").html("Can't use String object");
}

И выход DivCan't use String object Демо здесь

1 голос
/ 26 января 2012

По какой-то причине он не работает с массивом.Попробуйте это.

 $(["one","two","three"]).each(function(i, val){
        if(val == "one")
            $("div#msg").html(val);
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...