JavaScript之数据类型

什么是数据

  • 生活中无时无刻都在跟数据打交道
    • 例如:人的体重、身高、收入、性别等数据等
  • 在我们使用计算机的过程中,也会接触到各种各样的数据
    • 例如: 文档数据、图片数据、视频数据等

数据分类

静态数据

  • 静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右,因此硬盘中可以存放一些比较大的文件
  • 存储的时长:计算机关闭之后再开启,这些数据依旧还在,只要你不主动删掉或者硬盘没坏,这些数据永远都在
  • 哪些是静态数据:静态数据一般是以文件的形式存储在硬盘上,比如文档、照片、视频等。

动态数据

  • 动态数据指在程序运行过程中,动态产生的临时数据,一般存储在内存中。内存的存储空间一般都比较小,现在普通计算机的内存只有8G左右,因此要谨慎使用内存,不要占用太多的内存空间
  • 存储的时长:计算机关闭之后,这些临时数据就会被清除
  • 哪些是动态数据:当运行某个程序(软件)时,整个程序就会被加载到内存中,在程序运行过程中,会产生各种各样的临时数据,这些临时数据都是存储在内存中的。当程序停止运行或者计算机被强制关闭时,这个程序产生的所有临时数据都会被清除。
  • 既然硬盘的存储空间这么大,为何不把所有的应用程序加载到硬盘中去执行呢?主要原因就是内存的访问速度比硬盘快N倍

静态数据和动态数据的相互转换

  • 从磁盘加载到内存(静到动)
  • 从内存保存到磁盘(动到静)

数据的计量单位

  • 不管是静态还是动态数据,都是0和1组成的
  • 数据越大,包含的0和1就越多
1 B(Byte字节) = 8 bit(位)
// 00000000 就是一个字节
// 111111111 也是一个字节
// 10101010 也是一个字节
// 任意8个0和1的组合都是一个字节
1 KB(KByte) = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

JavaScript数据类型

  • 为程序员我们最关心的是内存中的动态数据, 因为我们写的程序就是在内存中的
  • 程序在运行过程中会产生各种各样的临时数据, 为了方便数据的运算和操作, JavaScript也对这些数据进行了分类, 提供了丰富的数据类型
  • 在JavaScript中一共有六种数据类型

JavaScript基本数据类型

  • String 字符串类型
    在JavaScript中无论是整数还是小数都属于数值类型
  • Number 数值类型
    在JavaScript中无论是通过单引号还是双引号括起来的内容都属于字符串类型
  • Boolean 布尔值类型
    在JavaScript中布尔类型比较特殊,只有两个取值 truefalse
  • Null 空值类型
  • Undefined 未定义类型
    在JavaScrip中也比较特殊,只有一个取值 undefined

JavaScript引用类型

  • Object 对象类型

数据类型检测

在JavaScript中可以用 typeof 操作符来检测数据类型, typeof 操作符会将检查的结果以字符串的形式返回给我们

let a = 666;
console.log(typeof a);        // number
console.log(typeof 123);      // number
console.log(typeof 3.14);     // number

let b = 'abcd';
console.log(typeof b);         // string
console.log(typeof 'abc');     // string
console.log(typeof  "abc");    // string

let c = true;
console.log(typeof c);         // boolean
console.log(typeof true);      // boolean
console.log(typeof false);     // boolean

let d;
console.log(typeof d);         // undefined

JavaScript数据类型转换

转换为字符串类型

将数值类型Number转换为字符串类型

  • 通过 toString() 可以将数值类型转换为字符串类型
let value = 123;
console.log(value);  // 123
console.log(typeof value);  // number

// 将 value 中的内容拷贝一份,然后将拷贝的数据转化为字符串返回
// toString() 方法是对拷贝的数据进行转换,不会影响到原数据
let str = value.toString();
console.log(str);   // 123
console.log(typeof str); // string
  • 可以通过 String() 将数值类型转换为字符串类型
let value = 123;
console.log(value);   // 123
console.log(typeof value);   // number

let str = String(value);
console.log(str);    // 123
console.log(typeof str);     // string
  • 可以通过 变量 + ""变量 + '' 将数值类型转换为字符串类型
let value = 123;
let str1 = value + '';  // 123
let str2 = value + "";  // 123
console.log(typeof str1);  // string
console.log(typeof str2);  // string

将布尔类型Boolean转换为字符串类型

  • 通过 toString() 可以将布尔类型转换为字符串类型
let value = true;
console.log(value);  // true
console.log(typeof value);  // boolean

// 将 value 中的内容拷贝一份,然后将拷贝的数据转化为字符串返回
// toString() 方法是对拷贝的数据进行转换,不会影响到原数据
let str = value.toString();
console.log(str);   // true
console.log(typeof str); // string
  • 可以通过 String() 将布尔类型转换为字符串类型
let value = true;
console.log(value);   // true
console.log(typeof value);   // boolean

let str = String(value);
console.log(str);    // true
console.log(typeof str);     // string
  • 可以通过 变量 + ""变量 + '' 将布尔类型转换为字符串类型
let value = true;
let str1 = value + '';  // true
let str2 = value + "";  // true
console.log(typeof str1);  // string
console.log(typeof str2);  // string

将未定义undefined类型转换为字符串类型

  • 可以通过 String() 将未定义类型转换为字符串类型
let value = undefined;
console.log(value);   // undefined
console.log(typeof value);   // undefined

// 根据传入的参数重新生成一个字符串
let str = String(value);
console.log(str);    // undefined
console.log(typeof str);     // string
  • 可以通过 变量 + ""变量 + '' 将布尔类型转换为字符串类型
let value = undefined;
let str1 = value + '';  // undefined
let str2 = value + "";  // undefined
console.log(typeof str1);  // string
console.log(typeof str2);  // string

将空类型null转换为字符串类型

  • 可以通过 String() 将空类型转换为字符串类型
let value = null;
console.log(value);   // null
console.log(typeof value);   // object

let str = String(value);
console.log(str);    // null
console.log(typeof str);     // string
  • 可以通过 变量 + ""变量 + '' 将布尔类型转换为字符串类型
let value = null;
let str1 = value + '';  // null
let str2 = value + "";  // null
console.log(typeof str1);  // string
console.log(typeof str2);  // string

将常量转换为字符串类型

  • 可以通过 String() 将常量换为字符串类型
let value = String(123);
console.log(typeof value);  // string
  • 可以通过 变量 + ""变量 + '' 将数值类型转换为字符串类型
let value1 = 123 + '';
let value2 = 123 + "";
console.log(value1);    // 123
console.log(typeof value1);     // string
console.log(value2);    // 123
console.log(typeof value2);     // string

转换为数值类型

字符串转换为数值类型

  • 通过 Number() 方式来转换
 let str = '123';
console.log(str);  // 12
console.log(typeof str);  // string

let value = Number(str);
console.log(value);  // 123
console.log(typeof value);  // number

let res = Number('456');
console.log(res);  // 456
console.log(typeof res);  // number

// 如果字符串中没有数据,那么转换的几个为 0
// 如果字符串中的数据不仅仅是数值,那么转换结果是 NaN
let str1 = '  ';
let value1 = Number(str1);  // 0
console.log(typeof value1); // number

let str2 = '12px';
let value2 = Number(str2);  // NaN
console.log(typeof value2); // number
  • 通过数学运算中的加号和减号来转换
// 通过加号和减号可以将其他类型转化为数值类型,但会改变其正负性
// 加号和减号本质是调用了Number函数
let str = '123';
let value = +str;
// let value = -str;  // -123
console.log(value);  // 123
console.log(typeof value); // number
  • 通过parseInt()parseFloat() 来转换
// parseInt()和 parseFloat()都会从左至右提取数值,一旦遇到非数值就会立即停止
// 停止的时候还有没提取到数值,则返回NaN
// parseInt()和 parseFloat()都将传入的数据当做字符串处理
let str1 = '12px';
let str2 = '3.14px';
let res1 = parseInt(str1);   // 12
let res2 = parseInt(str2)    // 3
let res3 = parseFloat(str2)  // 3.14

布尔类型转换为数值类型

  • 通过 Number() 方式来转换
// 如果布尔类型 true,那么转换之后的结果是 1
// 如果布尔类型 false,那么转换之后的结果是 0
let flag = true;
let value = Number(flag);
console.log(value);   // 1
console.log(typeof value);  // number
  • 通过数学运算中的加号和减号来转换

未定义转换为数值类型

  • 通过 Number() 方式来转换
// 如果是未定义类型,那么转换之后的结果是`NaN`
let flag = unddefined;
let value = Number(flag);
console.log(value);   // NaN
console.log(typeof value);  // number
  • 通过数学运算中的加号和减号来转换

空类型转换为数值类型

  • 通过 Number() 方式来转换
// 如果是空类型,那么转换之后的结果是0
let flag = null;
let value = Number(flag);
console.log(value);   // 0
console.log(typeof value);  // number
  • 通过数学运算中的加号和减号来转换

转换为布尔类型

在JavaScript中想要将基本类型转换为布尔类型,只需调用 boolean()

  • 将字符串类型转换为布尔类型
    只要字符串中有内容都会转换为true,只有字符串中没有内容才会转换为false
let str = 'abc';
let flag = Boolean(str);
console.log(flag); // true
console.log(typeof flag); // boolean
  • 将数值类型转换为布尔类型
    只有数值是0时才会转换为false,其他都会转换为true
    NaN也会转换成false
let num = 888;
let flag = Boolean(num);
console.log(flag);  // true
console.log(typeof flag);  // boolean
  • 将未定义类型转换为布尔类型
let num = undefined;
let flag = Boolean(num);
console.log(flag);  // false
console.log(typeof flag); // boolean
  • 将空类型转换为布尔类型
let num = null;
let flag = Boolean(num);
console.log(flag);  // false
console.log(typeof flag); // boolean

基本包装类型

之所以能够访问基本数据类型的属性和方法,是因为在运行的时候系统自动将基本数据类型包装成了对象类型

let str = "www.jianshu.com";
// let str = new String(str);
console.log(str.length);
str.split(".");

推荐阅读更多精彩内容