大家好!
请问出了什么问题呢?
HTML
<h1 id="first>First</h1>
Javascript
var name = getElementById('first');
name.textContent = "DecadeHew";
当我执行测试的时候没改变没反应!
但是如果我把变数 name更换其他字母就可以正常执行!
为什么声明变数name是不能执行?
我有查过js keyword 和 reserved的字都没有name存在,那为什么有这样问题?
谢谢解答!^^
没问题
http://jsfiddle.net/txd3h9e7/
不是没反应,是因为没找到DOM对象,为什么没找到?因为文档还没完全加载!如果你试一下下面的代码,就会有反应了:
或者,像2L那样,把脚本引入放到最后。
如果元素是p,console.log(name)输出[object HTMLParagraphElement],typeof name结果是string,注意是string而不是String,它只是个值,表示元素对象的类型的名字,而不是指元素对象。即使你定义var name=123; typeof name也是string,说明这个值是个字符串,不能被覆盖,原因不详。
另外,每种浏览器的保留字都多多少少有点出入,像“name”,“value”等等这些在属性能见到的名字还是不要用了吧。
楼主的问题真的解决了吗?
之所以会出现这种奇怪的现象,是因为你的
name
是全局的,但是巧的是,window
也有一个name
属性,而且后者是不能覆盖的,所以你调用name = ...
的时候实际上是给window.name
赋的值。而且赋值的时候会调用所赋变量的toString()
方法,因此你会发现window.name
的值成了[object HTMLpElement]
,其他值也是一样,统统变成字符串。之后你再给这个name
设置的任何属性都是对window.name
进行的操作。一般情况下,只有
name
是全局变量的情况下,才会出现这种问题,你在函数中定义name
变量是完全没有问题的。解决方法也很简单,换个变量名,或者将它变为非全局的变量即可,我在这里使用了一个匿名的闭包,楼主可以测试下:注:
window
中还有很多类似name
这样的属性,定义全局变量的时候需要注意下。Links
Window.name
HTML
JS