常见问题当前位置:风暴娱乐 > 常见问题 > >

Javascript ES6中数据类型Symbol的使用详解(2)

  
  

以Symbol值作为名称的属性不会被常规方法遍历所得到。我们可以利用这个特性,为对象定义一些非私有但又希望只用于内部的方法。

  

  
  
  var size = Symbol('size');  class Collection {  constructor(){  this[size] = 0;  }  add(item){  this[this[size]] = item;  this[size]++;  }  static sizeOf(instance){  return instance[size];  }  }  var x = new Collection();  Collection.sizeOf(x); //0  x.add('foo');  Collection.sizeOf(x); //1  Object.keys(x)//['0']  Object.getOwnPropertyNames(x) //['0']  Object.getOwnPropertySymbols(x) //[Symbol(size)]
  
  

上面的代码中,对象x的size属性是一个Symbol值,所以Object.keys(x) Object.getOwnPropertyNames(x)都无法获取它。这就造成了一种非私有的内部方法的效果。如果对ES6定义类方面还不清楚的,可以先不看这段,或者自己查查资料,后面的文章我也会分享出来,总的来说现在JavaScript的新标准越来越像Java了,比如新增的const、let块级作用域,class定义类等等。

  

  

内置的Symbol值  

  

除了自己定义的Symbol值外,JavaScript有一些内置的Symbol表示的内部语言行为不在ECMAScript 5及以前暴露给开发者。这些Symbol可以被访问被下列属性:  

  

1、Symbol.iterator  

  

返回对象的默认迭代器的方法。被for…of使用  

  

2、Symbol.math  

  

与字符串匹配的方法,也用于判断对象是否可以用作正则表达式.被 String.prototype.match()使用。

  

  

3、Symbol.replace  

  

一种方法取代匹配字符串的子串。被String.prototype.replace()使用。

  

  

4、Symbol.search  

  

返回与正则表达式匹配的字符串内返回索引的方法。被String.prototype.search()使用。

  

  

5、Symbol.split  

  

在与正则表达式匹配的索引处拆分字符串的方法。被String.prototype.split()使用.

  

  

6、Symbol.hasInstance  

  

确定构造函数对象是否将对象作为实例识别的方法。被instanceof使用  

  

7、Symbol.isConcatSpreadable  

  

一个布尔值,指示对象是否应该被扁平化为数组元素。被Array.prototype.concat()使用.

  

  

8、Symbol.unscopables  

  

从关联对象的环境绑定中排除其自身和继承的属性名称的对象值。被with使用  

  

9、Symbol.species  

  

用于创建派生对象的构造函数。

  

  

10、Symbol.toPrimitive  

  

将对象转换为原始值的方法。

  

  

11、Symbol.toStringTag  

  

用于对象的默认描述的字符串值。被Object.prototype.toString()使用.

  

  

我这里没给出具体的例子,针对这11个属性。读者自己主动去把这几个属性搞懂,对理解有些方法是非常有用的。

  

  

总结  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

  
  

(责任编辑:admin)

上一篇:详解JavaScript中的事件流和事件处理程序

下一篇:没有了

推荐内容

客户服务热线

010-400-12345

在线客服