JS基础-变量类型和计算-面试题

值类型/引用类型

//值类型
let a = 100
let b = a
a = 200
console.log(b)  //答案是100
//引用类型
let a = { age:20 }
let b = a
b.age = 21
console.log(a.age) //答案是21

有关存储的知识。值类型是放在栈里的;对象等复杂类型存储在堆里,它们的内存地址指向的是堆,内存地址存放在栈里。引用类型案例中,使a和b的内存地址相同了,则改变b中值的同时也改变了a中的值;而值类型中不会变化。值类型和引用类型严格分离。

常见值类型/常见引用类型

5种值类型:undefined;字符串string;数字型number;布尔值boolean;symbol类型

3种引用类型:对象类型;数组类型;null空类型(特殊引用类型,指针指向为空地址);函数类型(算也不算。特殊引用类型,但不用于存储数据,所以没有“拷贝/复制函数这一说)

typeof运算符

识别所有值类型;识别判断函数;判断是否引用类型,结果都为Object(不可再细分)

深拷贝

function deepCopy(newobj,newobj){
    for (var k in obj) {
        //判断我们的值属于哪种数据类型
        //1.获取属性值 oldobj[k]
        var item = oldobj[k]
        //2.判断这个值是否是数组
        if (item instanceof Array) {
            newobj[k] = []
            deepCopy(newobj[k],item)
        } else if (item instanceof Object) {
            //3.判断这个值是否是对象
            newobj[k] = {}
            deepCopy(newobj[k],item)
        } else {
            //4.属于简单数据类型
            newobj[k] = item
        }
    }
}
function deepClone(obj = {}) {
    if (typeof obj !== 'object || obj == null) {
    //obj是null,或者不是对象 和数组,直接返回
    return obj
    }

    //初始化返回结果
    let result
    if (obj instanceof Array) {
        result = []
    } else {
        result = {}
    }
    
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            //递归调用
            result[key] = deepClone(obj[key])
        }
    }
    //返回结果
    return result
}
      

变量计算-类型转换

字符串拼接

==运算符(会造成隐式类型转换,除了==null之外,其他一律使用===,因为==null相当于===null || ===undefined)

if语句和逻辑运算。truly变量:!!a===true的变量;反之falsely变量。

逻辑判断。与或非,判断的返回值。(如console.log(0&&10),返回值是0。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值