12-数据类型

一、为什么要区分不同的数据类型

在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型。而且,不同的数据类型,寓意也不同。

二、JS中一共有七种数据类型

  • 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义、Symbol。
  • 引用数据类型(引用类型):Object 对象。

注意:内置对象 Function、Array、Date、RegExp、Error等都是属于 Object 类型。也就是说,除了那五种基本数据类型之外,其他的,都称之为 Object类型。

面试问:引用数据类型有几种?

面试答:只有一种,即 Object 类型。

三、String类型

1.用引号包裹的就是String类型。————简单理解:String说:穿了我的衣服就是我的人了。

2.String中的转义字符

和css中的特殊字符类似

  • \" 表示 "
  • \' 表示 '
  • \\ 表示\
  • \r 表示回车
  • \n 表示换行。n 的意思是 newline。
  • \t 表示缩进。t 的意思是 tab。
  • \b 表示空格。b 的意思是 blank。

3.获取字符串的长度

String

  <script>
    var str1 = '1;23';
    var str2 = '小艾 同学';
    var str3 = 'ab,cd';

    // 注意:
    // 中文、英文字母、数字都占一个字符
    // 中英文标点符号都占一个字符
    // 空格也占一个字符
    console.log(str1.length);//4
    console.log(str2.length);//5
    console.log(str3.length);//5
  </script>

4.字符串拼接

+号的连接的是一个字符串,就会变成连接符。
字符串和任何数据类型拼接,都会将拼接内容隐式转为字符串,并输出一个字符串。

    var str = '小艾同学';
    
    console.log(str + 666);//小艾同学666
    console.log(str + false);//小艾同学false
    console.log(str + null);//小艾同学null

四、Number类型

1.所有的数字都是Number类型

正负数,整数,小数都是Number类型

    <script>
        var num = 0x9;//前面加0x就是十六进制
        var num1 = 07;//前面加0代表八进制
        var num2 = 2e8;//e表示科学计数法次幂

        console.log(num);//9
        console.log(num1);//7
        console.log(num2);//1.7976931348623157e+308
        // Number最大范围
        console.log(Number.MAX_VALUE);//1.7976931348623157e+308
        // Number最小范围
        console.log(Number.MIN_VALUE);//5e-324
        // 无穷大Infinity
        console.log(Number.MAX_VALUE * 2);//Infinity
        // 无穷小-Infinity
        console.log(-Number.MAX_VALUE * 2);//-Infinity
    </script>

补充进制转换(以100为例)
几进制就是逢几进一→十进制逢十进一

各进制转十进制,就是*几进制的位数-1次幂...

  • 十进制转十进制
    100 = 110^2 + 010^1 + 0*10^0 = 100
  • 二进制转十进制
    100 = 12^2 + 02^1 + 0*2^0 = 4
  • 八进制转十进制(以0开头就是八进制)
    0100= 18^2 + 08^1 + 0*8^0 = 64
  • 十六进制转十进制(以0x开头就是十六进制)
    0x100 = 116^2 + 016^1 + 0*16^0 = 256

十进制转各进制就是/该进制的余数倒过来...

  • 十进制转二进制
    UTOOLS1587275379618.png
  • 别的进制同理

2.Number类型的特殊值---NaN

Not a Numberde 的简写,是Number类型

特点:NaN不等于任何东西,包括他自己

返回NaN的情况

  <script>
    // NaN不等于任何
    console.log(NaN == NaN);//false

    // 返回NaN的情况
    // 1.字符串计算
    console.log('a' - 1);//NaN

    // 2.类型转换时开头有无法转换成数字的值
    // 不能转换的一定要在开头
    console.log(parseFloat('1a'));//1
    console.log(parseFloat('a1'));//NaN
    console.log(parseFloat());//NaN
    console.log(parseInt('x'));//NaN
    console.log(Number('x'));//NaN
  </script>

3.0.1+0.2不等于0.3

   var a = 0.1 + 0.2;
    console.log(a);  //打印结果:0.30000000000000004

失精

五、Boolean类型

只有两个值:true和false
在输出Boolean类型时,不能加引号哦

六、Null

null表示"空对象",即该处不应该有值。
typeof Null 返回的是object

七、undefined

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

    <script>
      // 变量声明了未赋值,返回的即使undefined
      var a;
      console.log(a);//undefined
      
      // 检测undefined类型
      console.log(typeof undefined);//undefined
    </script>

八、比较Null和undefined

简单理解,以糖葫芦为例,本来应该是一串糖葫芦,undefined相当于就剩一个竹签了,null就是连签都没有...
推荐文章
https://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

    // null与undefined
    console.log(null == undefined);//ture
    console.log(null === undefined);//false

    // 计算
    console.log(1 + null);//1
    console.log(1 + undefined);//NaN

九、基本数据类型和引用数据类型区别

1.储存位置不同

  • 基本数据类型存放在栈中,数据大小确定,内存空间大小可以分配,直接按值存放的,所以可以直接按值访问。
  • 引用数据类型存放在堆内存中,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。在栈内存中保存的是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象

在JS中,每一个数据都需要一个内存空间。内存空间又被分为两种,栈内存(stack)与堆内存(heap)。
堆:先进先出
栈:先进后出
图示:
UTOOLS1587288126516.png

2.复制操作

  • 基本数据类型从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上,改变源数据不会影响到新的变量(互不干涉)
  • 引用类型复制的是存储在栈中的指针,将指针复制到栈中为新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;
  <script>
    var a = 10;
    var b = a;
    b = 20;

    var arr = ['小','艾','同学'];
    var arr1 = arr;
    arr1.push('666');


    // 基本数据类型复制后,改变复制的变量,原值不受影响
    console.log(a);//10
    console.log(b );//20

    // 引用类型复制后,改变复制的变量,原值也会跟着改变
    console.log(arr);//['小','艾','同学','666']
    console.log(arr1);//['小','艾','同学','666']
  </script>

图示:
UTOOLS1587290576035.png

posted @ 2020-04-19 13:50  小艾同学喔  阅读(362)  评论(3编辑  收藏  举报