js中typeof判断、==与===的使用场景、值类型和引用数据类型的区别、手写深拷贝、类型转换,truly、falsely变量

1、typeof判断

1.1 typeof操作符可以准确判断一个变量是否为下面几个原始类型(基本类型、值类型 )

typeof 'ConardLi'  // string
typeof 123  // number
typeof true  // boolean
typeof Symbol()  // symbol
typeof undefined  // undefined:

1.2 还可以用它来判断函数类型:

typeof function(){}  // function

1.3 typeof判断引用类型返回(object):

typeof [] // object
typeof {} // object
typeof new Date() // object
typeof /^\d*$/; // object
typeof null // 'object'

2、== 与 === 的使用场景

除了 == null 之外,其他都一律 ===,例如:

const  obj = { x : 100 }
if (obj.a == null ) { }
//相当于:
//if (obj.a === null || obj.a === undefined) { }

3、值类型(基本数据类型)和引用数据类型的区别

3.1 基本数据类型:Number、String、Boolen 、 Symbol、 null 、 undefined

3.2 引用类型:对象,数组,函数

3.3 值类型和引用类型的区别:

  • 值类型的值一旦确定就不可变
  • 基本类型的比较就是值的比较,只有值相等时,两者才相等
  • 基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

4、手写深拷贝

let cache = [] //初始化

function deepClone(source) {
  //先判断是否是Object类型
  if (source instanceof Object) {
    //判断source是否在缓存里
    let cacheDist = findCache(source)
    if (cacheDist) {   //有缓存
      return cacheDist
    } else {       //没缓存
      let dist
      if (source instanceof Array) {
        dist = new Array()
      } else if (source instanceof Function) {
        dist = function () {
          return source.apply(this, arguments)
        }
      } else if (source instanceof Date) {
        dist = new Date(source)
      } else if (source instanceof RegExp) {
        dist = new RegExp(source.source, source.flags)
      } else {
        dist = new Object()
      }
      cache.push([source, dist])
      //遍历每个属性克隆
      for (let key in source) {
        if (source.hasOwnProperty(key)) {
          dist[key] = deepClone(source[key])
        }
      }
      return dist
    }
  }
  return source
}

//查找缓存
function findCache(source) {
  for (let i = 0; i < cache.length; i++) {
    if (cache[i][0] === source) {
      return cache[i][1]   //对比 source 返回 dist
    }
  }
  return undefined
}

5、类型转换,truly、falsely变量

经过两次非运算为true的为truly变量,反之则为falsely,只有是truly变量才会走到if语句内
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值