一. 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.当 key 为 Symbol 时,key 要加 [],获取 value 要用 obj[] 形式。