js基础:变量

一,变量

0, Symbol

  es6新增的第七种数据类型,通过Symbol函数生成

  Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的。

  由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。

var mySymbol = Symbol();

// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
var a = {
  [mySymbol]: 'Hello!'
};

 

1,typeof 能识别哪些类型

  识别所有数据类型

  识别函数 :function

  识别引用类型 (不可再细分): object

2,什么时候用 === 、==。除了xxx == null / undefined ,都用 ===

3,引用类型 与 值类型。

  引用类型 栈 和堆:a  栈存的是内存地址。对象存在堆中(内存地址 - 对象)。a 赋值给b,只是把内存地址赋给b。引用的是同一个对象。

  null 是特殊引用类型,指向空地址

4, 手写深拷贝

/**
 * 手写深拷贝
 *  */ 
export function deepClone(obj) {
  if(typeof obj !== 'object' || obj == null) {
    console.log('result22:', obj)
    return obj
  }

  let result
  if(obj instanceof Array) {
    result = []
  } else {
    result = {}
  }

  for(const key in obj) {
    if(Object.prototype.hasOwnProperty.call(obj,key)) { //不是通过原型继承来的
      // 递归调用!!
      result[key] = deepClone(obj[key])
    }
  }
  console.log('result:', result)
  return result
}

 

posted @ 2020-09-17 11:21  毛栗的demo  阅读(56)  评论(0)    收藏  举报