• 每天五分钟-javascript数据类型


    javascript数据类型分为基本数据类型与复杂数据类型

    基本数据类型包括:string,number,boolean,null,undefined,symbol(es6)

    复杂数据类型包括:object

    1.基本数据类型与复杂数据类型存储上的区分

    基本数据类型存储在内存中的栈里面,复杂数据类型存储在内存中的堆里面。

    基本数据类型的变量指向内存中的数据,而复杂数据类型指向的实际上是内存中的地址,然后通过地址获取数据

    基本数据类型值的存储过程:先在栈里面声明一个变量num,并且赋值为undefined,然后将值1赋值给变量num,声明变量n,并且赋值undefined,然后将变量num的值赋值给n(这一过程实际是在栈中有声明了另一个存储区域,num与n不是通过指针指向同一个栈内存,因此改变num的值并不会使n的值发生改变)

    1.var num;    // undefined
    2:num = 1;    // 1
    3:var n;     // undefined
    4:n = num;    // 1
    5:num = 2    // 2
    6:console.log(n)// 1

    复杂数据类型值的存储过程:复杂数据类型在声明了之后,会在堆内存中开辟一块内存区域,用来存放数据。当创建一个对象obj={a: 1}时,会在对内存中开辟一块空间,用来存储对象中的数据。

    var obj = {a: 1}
    var obj1 = obj;
    obj.a = 2;
    console.log(obj1.a)      // 2

    栈与堆的区分:https://blog.csdn.net/K346K346/article/details/80849966

    2.javascript数据类型的区分

    在平常的使用过程中,常见的类型判断方法 typeof

    var sun1 = undefined;
    var sun2 = null;
    var sun3 = true;
    var sun4 = 10;
    var sun5 = '123'
    var sun6 = {a: 1};
    var sun7 = [1,2,3];
    var sun8 = function(){}
    var sun9 = new Date();
    
    console.log(typeof sun1);  // undefined
    console.log(typeof sun2);  // object
    console.log(typeof sun3);  // boolean
    console.log(typeof sun4);  // number
    console.log(typeof sun5);  // string
    console.log(typeof sun6);  // object
    console.log(typeof sun7);  // object
    console.log(typeof sun8);  // function
    console.log(typeof sun9);  // object

    看到上面的结果,发现什么问题没?很多的数据类型通过typeof判断实际是不能被检测出来的,比如null,new Date()等...

    那么,有什么其他的方法可以进行类型检测吗?

    Object.prototype.toString.call(),返回一个表示该对象的字符串,例如"[object type]",type代表了数据的类型。

    var toString = Object.prototype.toString;
    
    toString.call(undefined)      //  [object Undefined]  
    toString.call(null)               //  [object Null]  
    toString.call(true)              //  [object Boolean] 
    toString.call(10)                //   [object Number]
    toString.call('123')            //    [object String]
    toString.call({})               //    [object Object]
    toString.call([1,2,3])         //    [object Array]
    toString.call(new Date)     //     [object Date]
    toString.call(function(){}) //     [object Function]
    toString.call(Math)           //      [object Math]
    
    // JavaScript 1.8.5后修改
    toString.call(undefined)   // [object Undefined]
    toString.call(null)            // [object Null]       

    参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

  • 相关阅读:
    [问题2014S06] 解答
    [问题2014S07] 复旦高等代数II(13级)每周一题(第七教学周)
    [问题2014S05] 解答
    [问题2014S04] 解答
    [问题2014S06] 复旦高等代数II(13级)每周一题(第六教学周)
    [问题2014S03] 解答
    [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)
    [问题2014S02] 解答
    [问题2014S04] 复旦高等代数II(13级)每周一题(第四教学周)
    [问题2014S01] 解答
  • 原文地址:https://www.cnblogs.com/sk-3/p/10674600.html
Copyright © 2020-2023  润新知