【ECMAScript 5_6_7】10、ES6——Symbol

前言:ES5中对象的属性名都是字符串,容易造成重名,污染环境  

Symbol:

概念:

    ES6中添加了一种原始数据类型(已有的原始数据类型:String,Number,Boolean,Null,Undefined,Object)

特点:

    1、Symbol属性对应的值是唯一的,解决命名冲突问题

    2、Symbol值不能与其他数据进行计算,包括和字符串拼串

    3、for in、for of遍历时不会遍历Symbol属性

使用:

    1、调用Symbol函数得到symbol值

let symbol = Symbol()
let obj = {}
obj[Symbol] = 'hello'

    2、传参标识

let symbol1 = Symbol('one')
let symbol2 = Symbol('two')
consolo.log(symbol1)  // Symbol('one')
consolo.log(symbol2)  // Symbol('two')

    3、内置Symbol值

          *除了自己定义使用的Symbol值,ES6还提供11个内置的Symbol值,指向语言内部使用的方法

          -Symbol.iterator

          *对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Symbol</title>
</head>
<body>
<script type="text/javascript">
  let obj = {
    username:'onedean',
    age:20
  }
  let symbol = Symbol()
  obj[symbol] = 'hello'
  console.log(obj)  // {username: "onedean", age: 20, Symbol(): "hello"}
  //for in,for of遍历时不会遍历symbol属性
  for(let i in obj){
    console.log(i)  // username age
  }

  //Symbol属性对应的值是唯一的
  let symbol1 = Symbol()
  let symbol2 = Symbol()
  console.log(symbol1,symbol2,symbol1 == symbol2)  // Symbol() Symbol() false

  //Symbol可以传参标识
  let symbol3 = Symbol('one')
  let symbol4 = Symbol('two')
  console.log(symbol3,symbol4)  // Symbol(one) Symbol(two)

</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/edc3001/article/details/87940859