基础数据类型:number、string、boolean、null、undefined、bigint、symbol
引用数据类型:object

Symbol

“Symbol” 值表示唯一的标识符。

使用场景:

  • 防止覆盖:作为对象属性key值,保证属性不会冲突覆盖(尤其是三方库)
  • 隐藏属性:不会被for…in、Object.keys循环(Reflect.ownKeys可以返回所有健) ```javascript const id1 = Symbol(‘id’); const id2 = Symbol(‘id’); id1 == id2; //false id1.toString(); //Symbol(id) id1.description; //1

const User = { name: ‘Joy’, [id1]: ‘This is a Symbol key’, }; User[id1]; //‘This is a Symbol key’

for (let key in User) { console.log(key); //name Symbol被忽略 }

  1. <a name="Y0uns"></a>
  2. ## Array
  3. 由于JavaScript 数组的长度和元素类型都是非固定的 -> **数组在内存中也可以不连续**[https://zhuanlan.zhihu.com/p/371236424](https://zhuanlan.zhihu.com/p/371236424)
  4. ```javascript
  5. Array.prototype.myReduce=function(callback,initValue){
  6. //如果没有传入回调函数,则报错
  7. if(!callback) throw new TypeError('undefined is not a function');
  8. if (typeof callback !== 'function') {//传入的不是函数也报错
  9. throw new TypeError(callback + " is not a function");
  10. }
  11. var res,n=0;//定义返回结果以及定义数组循环开始的下标
  12. if(initValue){//如果有设置初始值
  13. res = initValue;
  14. }else{//如果没有初始值则把数组的第一个元素赋值给返回结果
  15. if(this.length===0){
  16. throw new TypeError('Reduce of empty array with no initial value');
  17. }else{//将第一个数组元素作为初始值
  18. res = this[0];
  19. n=1;//那数组循环的下标就应该是1
  20. }
  21. }
  22. for(var i=n,len=this.length;i<len;i++){
  23. res = callback(res,this[i],i,this);//将函数的返回值赋值给返回结果
  24. }
  25. return res;//返回结果
  26. }

Set

Map

Number

Bigint