对象的 keys 什么时候加引号,获取 value 用 obj. 还是 obj[]

697 阅读2分钟

一. key 可不加引号的情况

1.当 key 为标识符(即由数字、字母、_组成, 且首位不为数字)时, 如:

const obj = {
  pink1: "hello pink1",
  pink2: "hello pink2",
  pi_nk: "hello pi_nk",
};
若想获取对应的 value 可以通过 obj. 或者 obj[] 方式获取
console.log(obj.pink1);// hello pink1
console.log(obj["pink2"]);// hello pink2
console.log(obj["pi_nk"]);// hello pi_nk
console.log(obj[pi_nk]);// pi_nk is not defined
! 当使用 obj[] 时应加上引号,否则会当做变量处理

2.当 key 为数字或数值时, 如:

const obj = {
  14: "cyan",
  7.4: "pink",
  7e14: true,
  7e-14: true,
  0.714: true,
  0xff: true,
};
  • 只能通过 obj[] 拿到 value 。
  • 要获取上方 key 为纯数字 14 的 value, 可以使用 obj[14] 或者 obj['14']
console.log(obj["14"]); // cyan
console.log(obj[14]); // cyan
  • 要获取除了 14 以外其他数值的 value,最好使用 obj[], 而不是 obj[''](不知道是什么原因)
console.log(obj["7e14"]); // undefined
console.log(obj[7e14]); // true
console.log(obj["0xff"]); // undefined
console.log(obj[0xff]); // true

二. key 必须引号的情况

1.当 key 为非标识符,且第一个字符为数字,但整体不是数字时,如:

const obj = {
  "1c": "hello"
};
!当获取 value 时,只能使用 obj[''] 的方式
console.log(obj["1c"]); // hello
console.log(obj[1c]);// Uncaught SyntaxError:Invalid or unexpected token

2.当 key 有空格或运算符时,如:

// 报错
const obj = {
  c y: "Hello1",
  a+n: "Hello2",
};
// 正确
const obj1 = {
  "c y": "Hello1",
  "a+n": "Hello2",
};
!当获取 value 时,也只能使用 obj[''] 的方式
// 报错
console.log(obj[c y]);
console.log(obj[a+n]);
// 正确
console.log(obj["c y"]);// hello1
console.log(obj["a+n"]);// hello2

三. key 为 Symbol 时,加 []

let obj = {
  // 错误
  Symbol(14):14
  // 正确
  [Symbol(7)]: 7,
};
!获取 value 时,只能先通过将 Symbol() 赋值给一个变量,然后通过 obj[] 的方式才能拿到 value
let sym = Symbol(7);
let obj = {
  [Symbol()]: 8,
  [sym]: 14,
};
console.log(obj["sym"]);// undefined
console.log(obj[Symbol()]);// undefined
console.log(obj[sym]);// 14
 总结:1.当 key 为标识符时,可以不加引号,获取 value 最好使用 obj[''];
      2.当 key 为非标识符时分三种情况:
        a.纯数字
        key 加不加引号都行,获取 value 使用 obj[] 或者 obj[''] 都可以;
        
        b.数值
        key 加不加引号都可以,但是注意,加了引号后获取 value 时,要用 obj['']
        ,若不加, 最好要用 obj[],否则得出的结果为 undefined
        
        c.有空格或运算符
        key 必须加引号,获取 value 要用 obj['']
      3.当 keySymbol 时,key 要加 [],获取 value 要用 obj[] 形式。