ECMAScript6(四) Symbol数据类型

1.symbol:表示独一无二的值,是js中的第七种数据类型

symbol 函数前不能使用new 否则会报错,原因在于symbol是一个原始类型的值,不是对象

symbol 函数会接收一个字符串作为参数,表示对symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,容易区分。

let s1 = Symbol('s1');        // 仅仅为了描述和区分

let s2 = Symbol('s2');

console.log(Symbol('s') === Symbol('s'))     // false(只是为了描述和区分)

Symbol 对 String 的转换

console.log(String(Symbol('hello')));           // 字符串 Symbol(hello)
console.log(typeof String(Symbol('hello')));    // 数据类型 string

Symbol 对 Boolean 的转换

console.log(!Symbol('hello'));          // false
console.log(!!Symbol('hello'));         // true    Symbol()本身是true

Symbol 对 Number 的转换(不能转换为 number 因此就不会有 parseInt parseFloor 等转换)

console.log(Number(Symbol()))       // 报错 Uncaught TypeError: Cannot convert a Symbol value to a number
Symbol 不能做任何运算以及字符串拼接
console.log(Symbol('hello') + 'world'); // 报错 Uncaught TypeError: Cannot convert a Symbol value to a string

Symbol 作为对象的属性名

let x = Symbol('x');
let obj = {};
obj[x] = 'hello';
console.log(obj);       // {Symbol(x): "hello"}
console.log(obj[x]);    // hello

let s = Symbol('s');
let data = {
    [s] : 'hello'
}
console.log(data);      // {Symbol(x): "hello"}
console.log(data[s]);   // hello

直接在data 中写入 Symbol() 属性,取不到 Symbol() 所对应的值

let data2 = {
            [Symbol()] : 123
        }
        console.log(data2);                 // {Symbol(): 123}
        console.log(data2[Symbol()]);       // undefined
        console.log(data2['Symbol()']);     // undefined

采用for..in 的方式进行遍历,取不到 Symbol()的值

let xx = Symbol('xx');
let data4 = {
    [xx] : 2,
    a : 3,
    b : 4
}
console.log(data4[xx]);
for(let i in data4){
    console.log(i);    // a,b 跳过 [Symbol('xx)]属性
}

let data3 = {
    'a' : 1,
    [Symbol()] : 12,
    'b' : 2
}
for(let i in data3){
    console.log(i);     // a,b 跳过 [Symbol()] 属性
}
可以通过Object.getOwnProoertySymbols 方法获得一个对象的所有的Symbol属性
console.log(Object.getOwnPropertySymbols(data4));    // [Symbol(xx)]
console.log(data4[Object.getOwnPropertySymbols(data4)[0]]); // 2




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值