2012-01-26 4 views
0

の収集のため、それぞれ以下のコードは、Firefoxで例外がスローされます。jQueryの文字列

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

例外はこれです:

[nsIDOMDocumentFragment.appendChild] JavaScriptの引数arg 0を変換できませんでした

ただし、コードを変更してthis.toString()を次のように使用すると動作します。

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

"this"が文字列の場合、なぜtoString()を行う必要がありますか?私が紛失しているjavaScriptのニュアンスがあるのでしょうか、まさに私はバカなのですか?ニュアンスだと教えてください。

答えて

1

文字列プリミティブとStringオブジェクトの区別 JavaScriptはプリミティブとStringオブジェクトを自動的に変換するため、プリミティブ文字列にStringオブジェクトメソッドを使用することができます。メソッドがプリミティブ文字列またはプロパティルックアップで呼び出されるコンテキストでは、JavaScriptは自動的に文字列プリミティブをラップしてメソッドを呼び出したり、プロパティルックアップを実行したりします。 MDN Read More元については

$("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"); 
} 

そして、div要素の出力がCan't use String objectです。 Demoここに

+0

良い説明 - 私はそれを感謝します。 –

1

なんらかの理由でアレイでは機能しません。これを試して。

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

あなたはこのしようとした場合:

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

あなたはthisthis.toString()が実際に同じものではありませんコンソールに表示されます。 thisがStringオブジェクトで、this.toString()が実際の文字列であるようです。