JS基础之变量类型和计算

1、值类型和引用类型的区别

值类型:Number、string、bollean、undefined

引用类型:对象、数组、函数、null(空指针)

当需要检测数据类型时,值类型用的是typeof,引用类型用的是instanceof来检测。

值类型和引用类型的区别,我的理解是:一个保存在栈里,一个保存在堆里,值类型的值互相独立且不影响,而引用类型的值属于同一个内存地址,所以一个值改变了,另一个值也会随之改变。   

下面看看例子吧~

// 值类型
 let a =100
 let b = a
 a = 200 
console.log(b);  // 100

        结论: a是a,b是b , a的改变,不会影响b,所以输出还是100。

// 引用类型
let A = { age:20 }
let B = A 
B.age = 24
console.log(A.age) // 24

        结论:一旦赋值了,B改变了,A也会随之改变,如果想要单独改变A的值,可以对其进行深拷贝。

下面来小试牛刀吧  这是常见面试题之一

const obj1 = { a:100 , b: 200}
const obj2 = obj1
let x1 = obj1.b 
obj2.a = 103
x1 = 500  
console.log(obj1.a);  // 103

2、手写深拷贝

    // 定义一串数据
    const obj1 = {
        name: 'zhangsan',
        age: 23,
        city: 'shenzhen',
        arr: ['a', 'b', 'c'],
        object: {
            x: {
                z: 1000
            }
        }
    }
    // 使用深拷贝
    const obj2 = deepLoop(obj1)
    obj1.city = 'beijing'
    console.log(obj1.city);
    
    function deepLoop(obj = {}) {
        //先判断是不是空值 和 是不是对象 , 不是 则返回
        if (typeof obj !== 'object' || obj == null) {
            return obj
        }
        // 定义一个放 存储结果 的空值
        var result
        // 使用 instanceof  来判断obj是否为数组
        if (obj instanceof Array) {
            result = []
        } else {
            result = {}
        }
        // for in 循环遍历  然后进行递归!
        for (let key in obj) {
            // 需要保证key 不是原型的属性
            if (obj.hasOwnProperty[key]) {
                result[key] = deepLoop(obj[key])
            }
        }
        return result
    }

3、何时使用双等(==)和全等(===)


if(obj.a==null){
    // 这里相当于 obj.a===null || obj.a===undefind 简写形式
    //结果是一样的 
}

结论:除了null 或 undefined 以外其他一律全等。

== 先尝试为不同类型的值进行转换,然后再比较值是否相等。

===当两边类型相同时,直接对比值,否则返回false

4、typeof能判断哪种类型

(1) 能判断是否为值类型 (undefined string number boolean symbol)

(2) 能判断是否为引用类型(Object  Array)

(3) 能判断是否为函数 (Function)

注 : 自己学习整理,如果有不对的地方,还请多多指教,谢谢大家 ~!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值