写点什么

js 对象的 key 到底加不加引号?

  • 2022 年 7 月 11 日
  • 本文字数:939 字

    阅读完需:约 3 分钟

写在前面

前两天看到一个同事的代码,他写对象的时候会把 key 值都会加上"",于是我又重新复习了一下关于对象中的 key 值加不加""的知识点。


那么加不加""有什么区别呢?首先要复习一下标识符原则:


1、首字母必须是字母、下划线(_)或美元符号($),不能是数字。

2、除首字母外,其他字符可以是字母、数字、下划线或美元符号($)。

3、普通标识符(用作变量名、函数名和循环语句中用于跳转的标记)不能是保留字符或关键字。

4、在严格模式下,arguments 和 eval 不能用作变量名,函数名或者参数名。


所以这里要分符合标识符情况不符合标识符情况来说一下。

符合标识符情况

key 加不加"",都一样,读取 key 对应的 value 有两种方式:obj["key"]obj.key都可以。


代码如下:


let obj1 = {    name: "小明",    $age: 18,    _like: "爱好广泛"}let obj2 = {    "name": "小红",    "$age": 16,    "_like": "爱好很少"}
console.log(obj1) // {name: "小明", age: 18, _like: "爱好广泛"}console.log(obj1.name, obj1.$age, obj1._like) // 小明 18 爱好广泛console.log(obj1['name'], obj1['$age'], obj1['_like']) // 小明 18 爱好广泛
console.log(obj2) // {name: "小红", $age: 16, _like: "爱好很少"}console.log(obj2.name, obj2.$age, obj2._like) // 小红 16 爱好很少console.log(obj2['name'], obj2['$age'], obj2['_like']) // 小红 16 爱好很少
复制代码

不符合标识符情况

key 必须加"",读取 key 对应的 value 只能是obj["key"]


代码如下:


let obj = {    "0": "小明",    "0name": "小明明", // 这里会报错:Invalid or unexpected token(无效标记意外字符)    "": 18,    "¥": "哈哈",    "  ": "爱好广泛"}console.log(obj) // {0: "小明", 0name: "小明明", "": 18, ¥: "哈哈", "  ": "爱好广泛"}console.log(obj.0, obj.0name) // 报错console.log(obj['0'], obj['0name'], obj[''], obj['¥'], obj['  ']) // 小明 小明明 18 哈哈 爱好广泛
复制代码


另外 Symbol 类型的值也不符合标识符,需要这种写法:obj["key"]


关于 Symbol 类型的学习,可以参考我的历史文章。


原创不易,如有错误,欢迎指正。

如果有帮助到你,请给大冰块悄悄点赞关注,你的点赞关注就是我写下去的动力。

让我们一起在前端的路上进步吧~🤭

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
js对象的key到底加不加引号?_7月月更_南极一块修炼千年的大冰块_InfoQ写作社区