2016-03-19 18 views
0

まず、document.bodyとはどのような条件がチェックされていますか?ボディータグが存在するかどうかですか?次に、eval()パラメータには何が起こっていますか?リストからの値が最終的にはdocument.body.text="deepblue";(これは廃止されていると思われる)のようにsetBodyAttrに渡されていることは確かですが、どのようになっていますか?このjavascript関数では何が起こっていますか?

リストに気づいた場合は、setBodyAttr('text', value)''textのような属性が渡されています。その後、eval()と別の''で連結されます。一方、値は''で渡されませんが、''と連結されます。""です。例えば、eval()といったら何をして、document.body.text="darkblue";を生産するのですか?

<html> 
    <head> 
    <title>DOM Tests</title> 
    <script type="application/javascript"> 
    function setBodyAttr(attr,value){ 
     if (document.body) eval('document.body.'+attr+'="'+value+'"'); 
     else notSupported(); 
    } 
    </script> 
    </head> 
    <body> 
    <div style="margin: .5in; height: 400;"> 
     <p><b><tt>text</tt>color</b></p> 
     <form> 
     <select onChange="setBodyAttr('text', 
     this.options[this.selectedIndex].value);"> 
      <option value="black">black 
      <option value="darkblue">darkblue 
     </select> 
     <p><b><tt>bgColor</tt></b></p> 
     <select onChange="setBodyAttr('bgColor', 
     this.options[this.selectedIndex].value);"> 
      <option value="white">white 
      <option value="lightgrey">gray 
     </select> 
     <p><b><tt>link</tt></b></p> 
     <select onChange="setBodyAttr('link', 
     this.options[this.selectedIndex].value);"> 
      <option value="blue">blue 
      <option value="green">green 
     </select> <small> 
     <a href="http://www.brownhen.com/dom_api_top.html" id="sample"> 
     (sample link)</a></small><br> 
     </form> 
     <form> 
     <input type="button" value="version" onclick="ver()" /> 
     </form> 
    </div> 
    </body> 
</html> 
+1

'(document.body)場合 - ブラウザDOM *は任意*真理-Yの値を返す場合。 [document.body](https://developer.mozilla.org/en-US/docs/Web/API/Document/body)を参照してください。 evalは非常に危険なものであり、 'document.body [attr] = value'として書かれていなければなりません。 – user2864740

+0

@ user2864740 - "任意の値を返します"、いいえ、真の値でなければなりません。 – Quentin

答えて

2

まず、どのような条件がdocument.bodyはに対してチェックされている:bodyタグが存在するか否か?

ちょうど約。 body要素の存在をチェックしています。 (bodyタグを持たないbody要素は、スタンドと終了タグがオプションなので、持つことができます)。

第2に、eval()パラメータには何が起こっていますか?リストからの値がsetBodyAttrに渡され、最終的には例えばdocument.body.text = "deepblue"が生成されることは間違いありません。 (これは廃止された構文のようです)、どうなっていますか?

evalは、文字列をJSとして実行します。

これは、文字列document.body.text="deepblue";を生成し、それがJS文であるかのように実行します。

構文は推奨されていませんが、非常に悪い習慣です。

賢明なアプローチは次のようになります

document.body[attr] = value; 
+0

「TEXTで渡された初期値に何が起こり、それに連結されましたか? valueパラメータと同じです。基本的には、私はちょうどそれらのすべてが実行される最終的な文字列にどのようになるのか混乱しています。 – user5948022

+0

'' *が最初に渡された – user5948022

+0

@ user5948022 - その特定の例では、評価されるJSコード( 'attr'変数とともに)を構成する文字列リテラルを区切るために' ''が使用され、 '' 'は文字列を区切りますそのコードの一部であるリテラル – Quentin

関連する問題