2016-03-19 65 views
0

首先,document.body被檢查的條件是什麼?是否存在身體標籤?其次,參數eval()發生了什麼?我非常肯定列表中的值正在傳遞到setBodyAttr以最終產生,例如,document.body.text="deepblue";(這似乎是不贊成使用的語法),但是這是如何發生的?這個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元素,因爲stand和end標籤是可選的)。

二,eval()參數發生了什麼變化?我很確定列表中的值被傳遞到setBodyAttr中以最終生成,例如document.body.text =「deepblue」; (這似乎是不贊成的語法),但它是如何發生的?

eval接收一個字符串並將其作爲JS執行。

因此,生成字符串document.body.text="deepblue";並執行它就好像它是一個JS語句。

語法不被棄用,這只是非常糟糕的做法。

明智的做法是:

document.body[attr] = value; 
+0

「TEXT傳入的初始值和連接的」'會發生什麼?與值參數相同。基本上我只是混淆了所有這些'如何變成最後的字符串來執行。 – user5948022

+0

''*最初通過 – user5948022

+0

@ user5948022 - 在該特定示例中,用於分隔組成字符串的文本(以及attr變量),用於評估JS代碼和用字符串分隔字符串字面意思是代碼的一部分 – Quentin