js数据类型及其检测

  • js数据类型分基本数据类型引用数据类型

    • 基本数据类型 number,string,boolean,undefined,symbol
    • 引用数据类型object ([] {} null)
  • 基本数据类型特点:

    1. 值是不可变得
    2. 存放在栈区(占据空间小、大小固定,属于被频繁使用数据)
  • 检验数据类型

  1. typeof: 检测全部基本数据类型(number,string,boolean,undefined,symbol),识别函数(function),判断是否是引用类型(不可细分null,[],{} => object)
  2. instanceof 用来判断A是否是B的实例,返回一个布尔值
  3. Object.prototype.toString.call()
    首先获取Object原型上的toString方法,让toString方法执行中的this指向第一个参数
    Object上的toString它的作用是返回当前方法执行的主体(方法中的this)所属类的详细信息即"[object Object]",其中第一个object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是this所属的类是Object
    引申
  • == 和 ===
    == : 会进行数据类型的转化
    === : 值和数据类型都会进行比较

  • null 和undefined的区别
    undefinde: 声明一个变量,但是没有赋值,未定义
    null: 原型链的最顶端 ,没有,就是空对象

  • 深拷贝和浅拷贝
    深拷贝: 会开辟一块新的内存空间,A和B不会相互影响
    浅拷贝: A和B共用一块内存空间,相互影响
    手写深拷贝

/**
 * 深拷贝
 */

const obj1 = {
    age: 20,
    name: 'xxx',
    address: {
        city: 'beijing'
    },
    arr: ['a', 'b', 'c']
}
let obj2 = deepClone(obj1)
obj2.address.city = '123'
console.log(obj1.address.city);

function deepClone(obj = {}) {
    // obj是null,或者不是数组,对象,直接返回空对象
    if (typeof obj !== 'object' || obj == null) {
        return obj
    }
    // 初始化返回结果
    let result
    if (obj instanceof Array) {
        result = []
    } else {
        result = {}
    }
    for (let key in obj) {
        // 保证key不是原型上的属性
        if (obj.hasOwnProperty[key]) {
            // 递归调用
            result[key] = deepClone(obj[key])

        }
    }
    return result
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值