美文网首页
数据类型与typeof

数据类型与typeof

作者: 马涛涛_风 | 来源:发表于2020-10-07 13:44 被阅读0次

    个人学习笔记,如有错误请指出

    数据类型

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

    • number NaN/Infinity特殊
    • string 单引号/双引号/反引号``
    • boolean true/false
    • null
    • undefined
    • symbol 创建唯一值
    • bigint

    引用数据类型:

    • object
      • {} 普通对象
      • [] 数组对象
      • /^[+-]?(?:\d|(?:[1-9]\d+))(\.\d+)?$/ 正则对象
      • 日期对象
      • function(较为特殊,函数是一个附带可被调用功能的常规的对象
      • ...

    一共8大数据类型

    更加详细和官方的解释参考MDN: JavaScript 数据类型和数据结构


    注意:
    javascript中,setmap是一种数据结构,本质上还是Object类型

    typeof

    typeof 操作符返回一个字符串,表示未经计算的操作数的类型

    //7个基本数据类型
    typeof 10
    //"number"
    typeof '1'
    //"string"
    typeof null
    //"object"
    typeof undefined
    //"undefined"
    typeof Symbol()
    //"symbol"
    typeof 9007199254740991n
    //"bigint"
    typeof true
    //"boolean"
    
    //object类型
    typeof {}
    //"object"
    typeof []
    //"object"
    typeof /^$/
    //"object"
    typeof new Date()
    //"object"
    

    注意比较特殊的

    //需要记住的特殊值
    typeof NaN
    //"number"
    typeof function(){}
    //"function"
    typeof null
    //"object"
    typeof []//不要搞混,typeof 细分对象是不可以的
    //"object"
    

    注意三个包装对象

    所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的NumberStringBoolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。

    var v1 = new Number(123);
    var v2 = new String('abc');
    var v3 = new Boolean(true);
    
    typeof v1 // "object"
    typeof v2 // "object"
    typeof v3 // "object"
    
    v1 === 123 // false
    v2 === 'abc' // false
    v3 === true // false
    

    typeof null === 'object' 原因

    typeof的原理:

    • 所有的数据类型值在计算机中存储的都是按照“二进制”存储的
    • null -> 000000
    • 只要是对象都是以 000 开始的
    • typeof`检测的时候,是按照计算机存储的二进制的值来检测的

    MDN解释:

    总结:

    因为在javascript当中值的类型由类型标签+实际数值表示,对象的类型标签是0,而null指向空指针,用0x00的值来表示,所以null的类型标签也是0,因此typeof null 返回 "object"

    NaN

    NaN:not a number 不是一个有效数字,但是它属于number数据类型的

    console.log(typeof NaN); //=>"number"
    console.log(NaN == NaN); //=>false
    console.log(NaN === NaN); //=>false
    let n = 10;
    
    //如何检测是NaN
    if (isNaN(n)) {
        // 条件成立:证明它真的是非有效数字
    }
    Object.is([val1],[val2])//检测两个值是否相等
    console.log(Object.is(NaN, NaN)); //=>true
    

    Object.is()内部对NaN的判断做了特殊处理

    Infinity

    typeof Infinity//"number"
    Infinity===Infinity//true
    -Infinity===Infinity//false
    

    symbol

    简单介绍

    JS 中的 Symbol 是什么?
    ECMAScript 6入门-Symbol

    Symbol 可以创建一个独一无二的值。

    
    console.log(new Symbol()); //Uncaught TypeError: Symbol is not a constructor
    //无法使用new Sumbol(基本数据类型)
    console.log(Symbol('AA') === Symbol('AA')); //false
    //每次都会创建一个唯一值,括号中的字符串可以看做标记,注释,只是为了区分
    
    let symb = Symbol('BB');
    console.log(symb === symb); //true 
    

    bigint

    最大安全数与最小安全数

    Number.MAX_SAFE_INTEGER//9007199254740991
    Number.MIN_SAFE_INTEGER//-9007199254740991
    Math.pow(2,53)//9007199254740992
    

    超过这个数计算会出现错误

    bigint解决大数问题

    如果服务器存储ID是长整型,int值非常大。当服务器将其转化为字符串的时候,返回给客户端就没有问题,如果服务器以Number类型返回,那么这个返回的id在浏览器中和服务器中值不一样,会发生改变,出现错误

    为了解决这个问题,在es6中引入新的数据类型bigint,在数字后面加n即为bigint类型

    9007199254740992123n+1n//9007199254740992124n
    typeof 9007199254740992124n//"bigint"
    

    相关文章

      网友评论

          本文标题:数据类型与typeof

          本文链接:https://www.haomeiwen.com/subject/flyfpktx.html