JS基础

211 阅读1分钟

JS变量类型

变量类型:值类型和引用类型

7种基本数据类型(值类型):

Undefined、Null、Boolean、Number、String、Symbol(es6新增,表示独一无二的值) 和BigInt(es10新增)

1种引用数据类型:Object(Object本质上是由一组无序的键值对组成的)。里面包含 function、Array、Date等。

JS的存储值的方式

  • 原始数据类型:直接存储在栈(stack)
  • 引用数据类型:同时存储在栈(stack)和堆(heap)中 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

JS变量类型判断

  • typeof:可以判断原始数据(除了null)类型和函数,其他均为object
console.log(typeof null);     // object   
  • instanceof:可以判断引用类型
  • constructor(原型继承):constructor 属性返回对创建此对象的数组函数的引用。

JS变量类型转换

  1. 显式的转换数据类型
  • 转换为布尔值(调用Boolean()方法)
  • 转换为数字(调用Number()、parseInt()和parseFloat()方法)
  • 转换为字符串(调用.toString()或者String()方法)

2.隐式的数据转换

a.递增和递减操作符
前置型和后置型(a++ ,a-- ,++a , --a)。
b. 一元操作符
expression ? true : false;
c.关系比较操作符
eg:5>3;     //true(结果为布尔值)

深拷贝

 const obj ={
    a:100,
    user:"zhangsan",
    array:[1,2,3],
    
 }
 function deepClone(obj = {}) {
        if (typeof obj != object || typeof obj == null) {
            //obj是null,或者不是对象和数组,就直接返回
            return obj
        }
        //初始化result
        let result
        if (obj instanceof Array) {
               //保证key不是原型的属性
            if (obj.hasOwnProerty(key)) {
                result[key]=deepClone(obj[key])
            }
        }
    }
    deepClone(obj)

何时用==,何时用===

除了==null之外,其他一律用===