JavaScript基础篇--类型

内置类型

JS一共有七种内置类型,又可以分类为基本类型和对象两大类型。

基本类型

包括string,number,boolean,null,undefined,symbol。基本类型的变量存储于栈内存中。
特性:
1.JS的number类型为浮点型,没有整型,浮点计算有可能出现bug。
2.NaN属于number类型,NaN不等于自身。
3.基本类型如果使用字面量的方式定义或赋值,那这个变量只会是个字面量,只有在必要的时候才会转换为对应的类型

let str = 'string' // 此时str只是字面量
str.toString() // 使用到string类型的内置方法时,才会转换为对象类型

对象(Object)

对象是引用类型,涉及到浅拷贝和深拷贝。对象变量的指针存储于栈内存中,对象中的数据存储与堆内存中。
浅拷贝:拷贝后的对象改变属性会导致原对象的属性改变

let objA = { name: '小明', age: 20 }
let objB = objA // 此时仅将objA的指针赋值给objB,并未在堆内存中重新开辟存储对应属性的空间,称为浅拷贝
console.log(objB.name) // 小明
objB.name = '大明'
console.log(objA.name) // 大明

深拷贝:拷贝后的对象改变属性不影响原对象

let objA = { name: '小明', age: 20 }
let objB = {} // 此时在栈内存中创建了objB的指针变量,并在堆内存中开辟了一个objB指针指向的内存空间
objB.name = objA.name // objB堆内存中增加name属性并赋值为objA.name
objB.age = objA.age
console.log(objB.name) // 小明
objB.name = '大明'
console.log(objB.name) // 大明
console.log(objA.name) // 小明
// 深拷贝方法
function deepClone(source) {
  if (!source && typeof source !== 'object') {
    // 非对象抛出错误
    throw new Error('error arguments', 'shallowClone')
  }
  const targetObj = source.constructor === Array ? [] : {}
  for (const keys in source) {
    if (source.hasOwnProperty(keys)) {
      if (source[keys] && typeof source[keys] === 'object') {
        targetObj[keys] = source[keys].constructor === Array ? [] : {}
        targetObj[keys] = deepClone(source[keys])
      } else {
        targetObj[keys] = source[keys]
      }
    }
  }
  return targetObj
}

typeof

typeof 对于基本类型,除了 null 都可以显示正确的类型

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof b // b 没有声明,但是还会显示 undefined

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值