文章目录
对象Object类型
- 对象是一组键值对组成的无序的集合,用{}表示,键值对之间用逗号分隔。
var myObj = {
isObj = true,
num: [1,2,3],
desp: '对象好像什么都可以包含'
}
- 键均为字符串类型,值可以是任意数字类型
- 获取一个对象的属性可用"对象名.属性(键名)的方式"
- ES6允许将表达式作为对象的属性名,即把表达式放在方括号内
let numproperty = 'num';
var myObj1 = {
[numproperty]: [1,2,3],
['des'+'cription']: '我是一个对象'
};
符号Symbol类型
- Symbol(符号)是ECMAScript6新增的数据类型。
- 符号是原始值,且符号实例是唯一、不可变的。
- 符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
- 符号就是用来创建唯一记号,进而用作非字符串形式的对象属性。
符号的基本用法:
- 使用
Symbol()
进行初始化 - 使用typeof操作符返回symbol
let s1 = Symbol;
let s2 = Symbol;
console.log(s1); //[Function: Symbol]
console.log(s2); //[Function: Symbol]
console.log(s1 === s2); //true;
let s3 = Symbol('foo');
let s4 = Symbol('foo');
console.log(s3); //Symbol(foo)
console.log(s4); //Symbol(foo)
console.log(s3 === s4); //false
- Symbol()函数不能与new关键字一起作为构造函数使用,避免创建字符包装对象。
使用符号作为属性:
//第一种表示方法
let s1 = Symbol('foo');
let o = {
[s1]: 'foo val'
}
//第二种表示方法
let s2 = Symbol('bar');
o[s2] = 'bar val';
//第三种表示方法
let s3 = Symbol('baz');
s4 = Symbol('qux');
s5 = Symbol('nan');
Object.defineProperty(o,s3,{value: 'baz val'});
Object.defineProperties(o,{
[s4]: {value: 'qux val'},
[s5]: {value: 'nan val'}
})
利用Symbol作为属性名,属性名不会被Object.keys()、Object.getOwnPropertyNames()、for…in循环返回:
let obj = {
[Symbol()]:'张三',
age: 20,
height:'178com'
}
for(let key in obj){
console.log(key);
}
let keys = Object.keys(obj);
console.log(keys); //输出:'age','height'
console.log(Object.getOwnPropertyNames(obj)); //输出:'age','height'