今天继续冲鸭!!!
根据代码题,查遗补漏一些JavaScript知识点。
今天的代码题如下:
- 对象的键名只能是字符串和 Symbol 类型。
- 其他类型的键名会被转换成字符串类型。
- 对象转字符串默认会调用 toString 方法。
var a={}, b='123', c=123;
a[b]='b'; //此时 a = { 123: 'b' }
a[c]='c'; // c 的键名会被转换成字符串'123',这里会把 b 覆盖掉。
// 此时 a = { 123: 'c' }
console.log(a[b]); // 输出c
复制代码
var a={}, b=Symbol('123'), c=Symbol('123');
// b 是 Symbol 类型,不需要转换。
a[b]='b';
// c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。
a[c]='c';
// 输出 b
console.log(a[b]);
复制代码
var a={}, b={key:'123'}, c={key:'456'};
// b 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。
a[b]='b';
// c 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。
a[c]='c';
// 输出 c
console.log(a[b]);
复制代码
对象
普通对象(plain object)
- 属性的键必须是字符串或者
symbol(
通常是字符串) - 值可以是任何类型
我们可以用下面的方法访问属性:
- 点符号:
obj.property
。 - 方括号
obj["property"]
,方括号允许从变量中获取键,例如obj[varWithKey]
。
其他操作:
- 删除属性:
delete obj.prop
。 - 检查是否存在给定键的属性:
"key" in obj
。 - 遍历对象:
for(let key in obj)
循环。
注意:
- 使用
const
声明的对象是可以被修改的
ES6 Map
Map
对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。
上面的代码题中,除了Symbol,如果想要不被覆盖 可以使用ES6提供的Map
var a=new Map(), b='123', c=123;
a.set(b,'b');
a.set(c,'c');
a.get(b); // 'b'
a.get(c); // 'c'
复制代码
参见
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END