name不能做变量名

来源:互联网 发布:如何增加淘宝搜索量 编辑:程序博客网 时间:2024/05/16 12:06

JavaScript中,name最好不要用作变量名,否则会有迷之bug。

会报错或造成一些错误的命名

  • 保留字
  • 关键字
  • JavaScript对象、属性和方法
  • Java保留关键字(Java可以和JavaS一起使用)
  • Windows保留关键字
  • HTML事件句柄
  • 非标准JavaScript

具体内容请看:http://www.runoob.com/js/js-reserved.html

哭了,今天我被一个bug折腾了半天。最后发现是因为变量名name原来是JavaScript内置的属性(用了var name,居然不给我报错!)。之前我完全不知道有这么个没什么用的属性,直到这次我膝盖中了一箭。name不是保留字,也不是关键字,所以用作变量并不会报错,这便是它最可怕的地方。 命名变量的时候

MDN关于Window.name属性的文档:https://developer.mozilla.org/en-US/docs/Web/API/Window/name

事情是这样的:

我想给input加个keyup事件实现ajax。input的id是username,秉着变量名简单易懂的原则,我机智地定义一个名为“name”的帅气变量。从此我的噩梦便开始了。

首先我通过id获取了input元素,然后调用keyup方法。console并没有报错,然而keyup里面的代码却没有执行。我想,莫不是keyup没写对?检查半天,也没打错什么字,语法也ok。开始我用的是DOM 0级事件,input元素莫非有点特殊,那我用DOM 2级事件试试?于是我改成name.addEventListener()。好了,这下报错了,说这个name.addEventListener()不是函数。诶?我……不对啊!这是什么鬼错误,代码又写错了?我又检查了一遍代码,没毛病。

这时候,我开始怀疑是并没有获取到元素。因为我其实是写了console.log(name);的,输出有点奇怪,是[object HTMLInputElement]。这个输出很奇怪,输出的貌似是个对象。然后我就试着输出下name.value,结果输出的是undefined,黑人问号??? 这么说,可能是获取元素出错了,这个获取id不行,那我就换一个获取方法,用document.forms[0].elements[“username”]。结果输出没什么变化,奇了个怪了。完了,难道浏览器出bug了,不可能啊,代码全都没问题啊。我去看了下其它成功执行的代码,对比了下语法什么的,还是找不到问题所在。

然后我就想,莫不是input有点神奇?那我试试其它的元素,然后就去获取一个< p>元素,发现这个超正常的!那为什么这个input就不行?

这时候我其实是绝望的。我就随便改一些东西。然后我参照了另一个文件的代码。它用的变量名是textbox,突然我觉得或许name不能做变量,因为它是DOM元素的一个属性。那我改成textbox好了。。然后,可以了。输出和事件响应函数都没问题了!!

我的内心是一群草泥马在奔腾。。。

写代码就是这样,什么坑都有,这种坑也有!听说有人还以为屏幕上的一个灰尘发现不了错误。在学习代码的过程中,除了要有扎实的基础知识,保证自己的语法不会出现太大错误,还要熟悉一些容易出错的地方,尽量去避免。第一次掉进坑里爬出来就不要第二次还掉下去。还有就是最好有一个优秀的前辈去询问,没有的话也可以去论坛和交流群礼貌地询问。

特写下此文,记录我悲惨绝望的过去。

0 0
原创粉丝点击