【JavaScript】数据类型—Object、Symbol类型

对象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'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南栀~zmt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值