name不能做变量名

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好了。。然后,可以了。输出和事件响应函数都没问题了!!

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

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

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

<think>我们正在处理用户关于编程错误“不能使用零长度变量名”的问题。根据用户描述,这个错误提示表明在代码中出现了长度为0的变量名,即空字符串作为变量名,这是不被允许的。 根据引用[2]和引用[3],我们知道编程错误中的语法错误(Syntax Error)通常是由于代码不符合语言的语法规则。零长度变量名就是典型的语法错误,因为变量名必须包含至少一个字符。 引用[4]提供了变量命名的规范,其中列举了许多常用变量名,这些变量名都是有意义的非空字符串。我们可以从中推断,变量名不能为空。 因此,这个错误的原因是在代码中使用了空字符串作为变量名。解决方法就是为变量赋予一个非空的、符合命名规范的名称。 下面我们将详细解释原因和解决方法。</think>### 编程错误:不能使用零长度变量名的原因和解决方法 #### 错误原因分析 1. **语法规范要求**: 所有编程语言都要求变量名必须包含至少一个有效字符。零长度变量名(即空字符串`""`)违反了基础语法规则,因为变量名本质上是内存地址的标识符[^2]。 2. **常见触发场景**: - 动态生成变量名时出现空字符串:`var = ""` - 从空数据源读取变量名:如空配置文件、空数据库字段 - 字符串处理错误:`name = user_input.strip()` 当`user_input`为空时 - 占位符未替换:`variable_name = "{{name}}"` 模板渲染失败时 3. **语言特性差异**: - **Python**:直接报`SyntaxError` - **JavaScript**:允许声明但无法使用(如`var "" = 10;`报错) - **Java/C++**:编译阶段直接拒绝 #### 解决方法 1. **基础验证**: 添加非空检查: ```python # Python示例 if not variable_name.strip(): raise ValueError("变量名不能为空") ``` 2. **安全赋值技巧**: ```javascript // JavaScript示例 const name = userInput || "default_name"; // 提供默认值 ``` 3. **动态变量名处理**: 使用字典/Map替代动态命名: ```python # 替代 eval(" = value") variables = {} key = input() or "backup_key" # 防止空输入 variables[key] = 42 ``` 4. **数据源防护**: - 数据库字段设置`NOT NULL`约束 - 配置文件添加默认值:`name: "unnamed"` 5. **开发辅助工具**: - 启用Linter工具(如ESLint/Pylint) - IDE安装命名规范插件(强制非空命名检查) #### 预防建议 - 始终遵循[变量命名基本规则](^4):使用`username`, `itemList`等明确语义的名称 - 关键操作前添加空值校验:`if (!name) throw Error("名称无效")` - 避免使用`eval()`等动态执行方法处理用户输入 - 在团队中实施[命名规范](^1),如强制变量名长度≥2字符 > **典型修复案例**: > 错误代码:`user = {"": "匿名"}` > 修复后:`user = {"name": input_name or "匿名"}` > 通过`or`运算符确保名称非空[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值