js 基础--数据类型和判断

数据类型

基本数据类型(原始值类型/值类型)

    String      正常字符串\模版字符串
    Number     (NaN\Infinity) 数字
    Boolean     布尔值
    null        空  typeof null ==> "object"
    undefined   未定义
    symbol      唯一值
    bigInt      大数字 
    ...

引用(对象)数据类型

        Object 基类
        {} plainObject
        Array
        Function
        Date
        RegExp
        ...
//symbol
    let str = "a";
    // "a" === "a" ; true
    // Symbol("a") === Symbol("a");// true?
    let obj = {
    
    
        a: 1,
        a: 2
    };
    let obj1 = {
    
    
        [Symbol("a")]: 1,
        [Symbol("a")]: 2
    }
    // obj.a = 2*/


    //bigInt
    //后端数据库在定义数字的时候会定义数字的长度
    //JS中是有最大安全数字的(js中的数字是有最大长度限制的)
    console.log(Number.MAX_SAFE_INTEGER);//js中的最大安全数字
    console.log(Number.MIN_SAFE_INTEGER);
    //bigInt数据类型
    // let bigNum = 9007199254740991n;
    // bigNum + 1
    // VM616:1 Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
    // bigNum + 1n

数据类型判断

1.typeof 能有效检测基本类型,检测引用类型都返回object,其中null属于特殊的引用类型返回object
(typeof null ==> “object”:不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型,null 的二进制表示是6个0,保留前三位,结果自然也是 000,所以执行 typeof 时会返回“object”。)
typeof 运行超过两次以上 最终返回值 都是字符串的 “string”
eg: (typeof typeof typeof 1234) 返回值 ==> string

2.instanceof 只有知道数据类型才可以判断   语法: 要判断数据类型的变量 instanceof Array
  1. constructor 语法: 要判断数据类型的变量.constructor === Array
    4.Object.prototype.toString.call() 原生js最全能的数据类型判断 “[object 数据类型]”

基本数据类型和引用数据类型的区别

值类型栈存储: 主要针对(Number、String、Boolean)三种数据。直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

引用类型堆栈存储: 主要针对Object、Array这两种引用数据以及null, 同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
在这里插入图片描述
基本数据类型和引用数据类型在堆栈内存中的执行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jfx_jfx/article/details/120532361