什么';这个javascript函数中发生了什么?

什么';这个javascript函数中发生了什么?,javascript,Javascript,首先,检查document.body的条件是什么?是否存在body标签?其次,eval()参数发生了什么变化?我非常确定列表中的值会被传递到setbodyatr中,以最终生成,例如,document.body.text=“deepblue”(这似乎是不推荐的语法),但这是怎么发生的 如果您注意到正在通过列表向下传递属性,例如setbodyatr('text',value)和'围绕文本。然后在eval()中与另一个'连接。另一方面,值不是通过'传递的,而是通过'内部的'连接的。究竟是什么做的eva

首先,检查document.body的条件是什么?是否存在body标签?其次,
eval()
参数发生了什么变化?我非常确定列表中的值会被传递到
setbodyatr
中,以最终生成,例如,
document.body.text=“deepblue”(这似乎是不推荐的语法),但这是怎么发生的

如果您注意到正在通过列表向下传递属性,例如
setbodyatr('text',value)
'
围绕
文本。然后在
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>

DOM测试
函数setbodyatr(属性,值){
if(document.body)eval('document.body.+attr+'=“'+value+”);
else不受支持();
}
text颜色

黑色 深蓝色 bgColor

白色 灰色 链接

蓝色 绿色
首先,检查document.body的条件是什么:是否存在body标记

差不多。它正在检查body元素是否存在。(可以使用不带主体标记的主体元素,因为其支架和末端标记是可选的)

其次,eval()参数发生了什么变化?我非常确定列表中的值会被传递到setbodyatr中,最终生成document.body.text=“deepblue”;(这似乎是不推荐的语法),但它是如何发生的

eval
获取一个字符串并将其作为JS执行

这样就生成了字符串
document.body.text=“deepblue”
并将其作为JS语句执行

语法并没有遭到反对,它只是一种非常糟糕的做法

明智的做法是:

document.body[attr] = value;
首先,检查document.body的条件是什么:是否存在body标记

差不多。它正在检查body元素是否存在。(可以使用不带主体标记的主体元素,因为其支架和末端标记是可选的)

其次,eval()参数发生了什么变化?我非常确定列表中的值会被传递到setbodyatr中,最终生成document.body.text=“deepblue”;(这似乎是不推荐的语法),但它是如何发生的

eval
获取一个字符串并将其作为JS执行

这样就生成了字符串
document.body.text=“deepblue”
并将其作为JS语句执行

语法并没有遭到反对,它只是一种非常糟糕的做法

明智的做法是:

document.body[attr] = value;

if(document.body)
-如果浏览器DOM返回任何truth-y值;看见eval是一些非常粗糙的东西,应该写成
document.body[attr]=value
,如果有的话。@user2864740-“返回任何值”,不,它必须是真值。
if(document.body)
-如果浏览器DOM返回任何truth-y值;看见eval是一些非常粗糙的东西,应该写成
document.body[attr]=value
,如果有的话。@user2864740-“返回任何值”,不,它必须是一个真值。带文本传递的初始值“”和连接到它的“”会怎么样?与value参数相同。基本上,我只是对这些“如何变成要执行的最终字符串”感到困惑passed@user5948022-在该特定示例中,
用于限定组成要计算的JS代码和
对作为该代码一部分的字符串文本进行定界。您能告诉我为什么需要这样做吗?基本上我不知道什么是定界。我会自己查的,只是想在这里了解一下大概情况。用文本传递的“”首字母以及连接到它的“”会发生什么情况?与value参数相同。基本上,我只是对这些“如何变成要执行的最终字符串”感到困惑passed@user5948022-在该特定示例中,
用于限定组成要计算的JS代码和
对作为该代码一部分的字符串文本进行定界。您能告诉我为什么需要这样做吗?基本上我不知道什么是定界。我会自己查的,只是想在这里了解一下大概情况。