一、定义
symbol范例是新的原始数据范例,示意举世无双的值,其他的原始数据范例另有Number,String,Boolean,Null,Undefined;Object属于庞杂数据范例。
二、参数
1、Symbol函数接收字符串作为参数,控制台输出时,比较轻易辨别。
2、Symbol函数的参数仅示意Symbol值得形貌,雷同的参数返回值也不一样
var a = Symbol('a');
var b = Symbol('a');
a === b //false
3、Symbol.for()能够天生同一个Symbol值。
请输入代码
var a = Symbol.for('a');
var b = Symbol.for('a');
a === b //true
Symbol.for()天生的名字是全局环境的,能够在差别的iframe中给取到值。
三、Symbol值作为对象
1、Symbol值作为属性名时不能运用点运算
2、定义属性时,必需放在方括号内,与一般键值举行辨别。
var a = Symbol('a');
var obj = {
a: 'normal key',
[a]: 'symbol key'
}
3、Symbol值定义的属性属于公然属性,一般要领没法遍历。
//如上例
Obj.getOwnProperty() //['a']
Obj.getOwnPropertySymbols() //[Symbol('a')]
Refelect.ownKeys() // ['a', Symbol('a')]
4、应用Symbol的特征可定义内部私有属性或要领
function getObj (obj) {
let privateKey = symbol('privateKey'),
objCopy = ...obj || {};
objCopy[privateKey] = function privateFunc () {
console.log('privateFunc ')
}
return objCopy;
}
let newObj = getObj();
newObj[privateKey] // 报错,外部没法获取到privateKey的值
newObj[symbol('privateKey')] //undefined,此时的symbol已变成新的symbol值
三、注重点
1、Symbol值不能举行隐式转换,因而它与其他范例的值举行运算,会报错。
2、Symbol值可显现地转换成字符串。
var a = Symbol('a');
a.toString() // 'Symbol(a)'
3、能够显现或隐式转成Boolen,却不能转成数值。
var a = Symbol('a');
Boolean(a) //true
if (a) {
console.log(a);
} //Symbol('a') 打印出来地Symbol值会带上参数,便于辨别