一、数据类型简介

1. 为什么需要数据类型

在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型

2. 变量的数据类型

变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将这些值的位存储到计算机的内存中。JavaScript是一种弱类型或者说动态语言,这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定

2.1 在代码运行时,变量的数据类型是由JS引擎根据 = 右边变量值的数据类型来判断的,运行完毕之后,变量就确定了数据类型

  1. var age = 10; // 数字型
  2. var name = '蔡徐坤'; // 字符串

2.2 JavaScript拥有动态类型,变量的数据类型是可以变化的,同时也意味着相同的变量可用作不同的类型

  1. var x = 7; // x 为数字
  2. var x = 'Tom'; // x 为 字符串

3. 数据类型的分类

JS把数据类型分为两类:
简单数据类型(Number,String,Boolean,Undefined,Null)
复杂数据类型(object)

二、简单数据类型(基本数据类型)

1.Number:数字型,包含整型值和浮点型值,如21、0.21,默认值 0
2.Boolean:布尔值类型,如true、false,等价于 1 和 0
3.String:字符串类型,如 “张三”,字符串都带引号
4.Undefined:var a; 声明了变量a,但是没有赋值,此时 a = undefined
5.Null:var a = null; 声明了变量a为空值

1. 数字型 Number

JavaScript数字类型既可以用来保存整数值,也可以保存小数(浮点型)

  1. var num = 10; // 数字型
  2. var PI = 3.14; // 数字型

1.1 数字型进制

最常见的进制有二进制、八进制、十进制、十六进制

1.1.1 八进制 0 ~ 7 我们程序里面数字前面加0 表示八进制

  1. var num1 = 010;
  2. console.log(num1); // 010 八进制 转换为 十进制 就是 8
  3. var num2 = 012;
  4. console.log(num2); // 10

1.1.2 十六进制 0 ~ 9 a ~ f #ffffff 数字的前面加0x 表示十六进制

  1. var num3 = 0x9;
  2. console.log(num3); // 9
  3. var num4 = 0xa;
  4. console.log(num4); // 10

1.2 数字型范围

JavaScript中数值的最大值

  1. console.log(Number.MAX_VALUE); // 1.7976931348623157e+308

JavaScript中数值的最小值

  1. console.log(Number.MIN_VALUE); // 5e-324

1.3 数字型三个特殊值

1.3.1 无穷大(Infinity)

  1. console.log(Number.MAX_VALUE * 2); // Infinity

1.3.2 无穷小(-Infinity)

  1. console.log(-Number.MAX_VALUE * 2); // -Infinity

1.3.3 非数字(NaN: Not a Number)

  1. console.log('pink老师' -100); // NaN

1.4 isNaN()方法

这个方法用来判断非数字,并且返回一个值。如果是数字返回的是false,如果不是数字返回true

  1. console.log(isNaN(12)); // false
  2. console.log(isNaN('蔡徐坤')); // true

2. 字符串型 String

字符串可以是引号中的任意文本,其语法为双引号”” 和单引号’’
• 因为HTML标签里面的属性使用的是双引号,JS这里我们更推荐使用单引号
• JS可以用单引号嵌套双引号,或者用双引号嵌套单引号(外双内单,外单内双)

  1. var strMessage1 = '你是个"憨憨"小可爱';
  2. var strMessage2 = "你是个'憨憨'小可爱";
  3. console.log(strMessage1);
  4. console.log(strMessage2);

2.1 字符串转义符

类似HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符
转义符都是\开头的
\n 换行符(n是newline的意思)
\ 斜杠 \
\’ ‘ 单引号
\” “ 双引号
\t tab缩进
\b 空格(b是blank的意思)

  1. var intro = "我是一个'刚入门的'\n程序员";
  2. console.log(intro);

2.1.2 案例:弹出网页警示框

酷暑难耐,火辣的太阳底下,我挺拔的身姿,成为最为独特的风景。我审视四周,这里,是我的舞台,我就是天地间的王者。这一刻,我豪气冲天,终于大喊一声:”收破烂啦~”

  1. alert('酷暑难耐,火辣的太阳底下,我挺拔的身姿,成为最为独特的风景。\n我审视四周,这里,是我的舞台,我就是天地间的王者。\n这一刻,我豪气冲天,终于大喊一声:"收破烂啦~"');

2.2 字符串长度

字符串是由若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的length属性可以获取整个字符串的长度

2.2.1 检测获取字符串的长度 length

  1. var str = 'my name is Tom';
  2. console.log(str.length);

2.3 字符串拼接 +

多个字符串之间可以使用 + 进行拼接,其拼接方式为 字符串 + 任何类型 = 拼接之后的新字符串
拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串

  1. // 字符串相加
  2. console.log('沙漠' + '骆驼'); // 沙漠骆驼
  3. // 数值 字符串 相加
  4. console.log('蔡徐坤' + 18); // 蔡徐坤18
  5. // 字符串 + 布尔型
  6. console.log('pink' + true); // pinktrue
  7. // 数值 + 数值
  8. console.log(12 + 12); // 24
  9. // 数值字符串 + 数值
  10. console.log('12' + 12); // 1212

2.4 字符串加强

变量和字符串相连的口诀:引引加加

  1. console.log('蔡徐坤' + age + '岁');

2.5 案例:显示年龄(利用JS编写的一个非常简单的交互效果程序)

弹出一个输入框,需要用户输入年龄,之后弹出一个警示框显示”您今年xx岁啦”(xx表示刚才输入的年龄)
1. 弹出一个输入框(prompt),让用户输入年龄(用户输入)
2. 把用户输入的值用变量保存起来,把刚才输入的年龄与要输出的字符串拼接(程序内部处理)
3. 使用alert语句弹出警示框(输出结果)

  1. var age = prompt("请输入您的年龄:");
  2. alert("您今年" +age + '岁啦!' );

3. 布尔型Boolean

布尔类型有两个值:true和false,其中true表示真(对),而false表示假(错)
布尔型和数字型相加的时候,true的值为1,false的值为0

  1. var flag = true; // flag 布尔型
  2. var flag1 = false; // flag1 布尔型
  3. console.log(true + 1); // 2
  4. console.log(false + 1); // 1

4. Undefined和Null

4.1 Undefined

一个声明后没有被赋值的变量会有一个默认值undefined(如果进行相连或者相加是,注意结果)
如果一个变量声明未赋值就是undefined未定义数据类型

  1. var str;
  2. console.log(str);
  3. var variable = undefined;
  4. console.log(variable + 'pink'); // undfinedpink
  5. // undefined和数字相加最后的结果是NaN
  6. console.log(undefined + 1); // NaN

一个声明后没有被赋值的变量会有一个默认值undefined(如果相连或者相加时,注意结果)

  1. var variable;
  2. console.log(variable); // undefined
  3. console.log('你好' + variable); // 你好undefined
  4. console.log(11 + variable); // NaN
  5. console.log(true + variable); // NaN

4.2 Null 空值

  1. var space = null;
  2. console.log(space + 'pink'); // nullpink
  3. console.log(space + 1); // 1

一个声明变量给null值,里面存的值为空

  1. var vari = null;
  2. console.log('你好' + vari); // 你好null
  3. console.log(11 + vari); // 11
  4. console.log(true + vari); // 1

三、获取变量数据类型

3.1 typeof可用来获取检测变量的数据类型

  1. var num = 10;
  2. console.log(typeof num); // number
  3. var str = 'pink';
  4. console.log(typeof str); // string
  5. var flag = true;
  6. console.log(typeof flag); // boolean
  7. var vari = undefined;
  8. console.log(typeof vari); // undefined
  9. var timer = null;
  10. console.log(typeof timer); // object
  11. // prompt取过来的值是字符型的
  12. var age = prompt('请输入您的年龄');
  13. console.log(age);
  14. console.log(typeof age); // string

我们还可以通过console这个浏览器控制台的颜色来判断它属于哪一种数据类型(数字型是蓝色、字符串型是黑色、布尔型是深蓝色、undefined和null是浅灰色)

3.2 字面量

字面量是在源代码中一个固定值的表示法,通俗来说,就是字面量表示如何表达这个值
数字字面量:8, 9, 10
字符串字面量:’黑马程序员’, “大前端”
布尔字面量:true,false

四、数据类型转换

使用表单、prompt获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算,而需要转换变量的数据类型。通俗来说,就是把一种数据类型的变量转换成另外一种数据类型
我们通常会实现3种方式的转换:
• 转化为字符串类型
• 转换为数字型
• 转换为布尔型

4.1 转换为字符串

方式 说明 案例
toString() 转成字符串 var num = 1; alert(num.toString());
String()强制转换 转成字符串 var num = 1;
alert(String());
加号拼接字符串 和字符串拼接的结果都是字符串 var num = 1;
alert(num + “我是字符串”);
  1. // 1. 把数字型转换为字符串型 变量.toString()
  2. var num = 10;
  3. var str = num.toString();
  4. console.log(str); // 10(黑色的是字符串型)
  5. console.log(typeof str); // string
  6. // 2. 利用String(变量)
  7. console.log(String(num)); // 10(黑色的是字符串型)
  8. // 3. 利用 + 拼接字符串的方法实现转换效果(隐式转换)
  9. console.log(num + ''); // 10(黑色的是字符串型)

4.2 转换为数字型(重点)

方式 说明 案例
parseInt(string)函数 将string类型转换成整数数值型 parseInt(‘78’)
parseFloat(string)函数 将string类型转换成浮点数数值型 parseFloat(‘78.21’)
Number()强制转换函数 将string类型转换为数值型 Number(‘12’)
js隐式转换(- * /) 利用算数运算隐式转换为数值型 ‘12’ - 0
  1. // 1. parseInt(变量) 和 parseFloat(变量)
  2. var age = prompt('请输入您的年龄');
  3. // parseInt(变量) 可以把字符型转换为数字型,得到的是整数
  4. console.log(parseInt(age)); // 13 (蓝色的是数字型)
  5. console.log(parseInt('3.17')); // 3 取整
  6. console.log(parseInt('3.97')); // 3 取整
  7. console.log(parseInt('120px')); // 120 会去掉px单位
  8. console.log(parseInt('rem120px')); // NaN
  9. // parseFloat(变量) 可以把字符型转换成数字型,得到的是小数
  10. console.log(parseFloat('3.14')); // 3.14 (蓝色的是数字型)
  11. console.log(parseFloat('120px')); // 120 (蓝色的是数字型)
  12. console.log(parseFloat('rem120px')); // NaN (蓝色的是数字型)
  13. 2. Number(变量)
  14. var str = '123';
  15. console.log(Number(str)); // 123
  16. console.log(Number('12')); // 12
  17. // 利用算数运算 - * / 隐式转换
  18. console.log('12' - 0); // 12
  19. console.log('123' - '120'); // 3
  20. console.log('123' * 1); // 123

注意:parseInt和parseFloat单词的大小写

4.3 转换为布尔型

方式 说明 案例
Boolean()函数 其他类型转成布尔值 Boolean(‘true’)

• 代表空、否定的值会被转换为false,如’’、0、NaN、null、undefined
• 其余值都会被转换为true

  1. console.log(Boolean('')); // false
  2. console.log(Boolean(0)); // false
  3. console.log(Boolean(NaN)); // false
  4. console.log(Boolean(null)); // false
  5. console.log(Boolean(undefined)); // false
  6. console.log(Boolean('小白')); // true
  7. console.log(Boolean(12)); // true

4.4 案例

案例1:计算年龄

要求在页面中弹出一个输入框,我们输入出生年份后,能计算出我们的年龄
案例分析:
1. 弹出一个输入框(prompt),让用户输入出生年份(用户输入)
2. 把用户输入的值用变量保存起来,然后用今年的年份减去变量值,结果就是现在的年龄(程序内部处理)
3. 弹出警示框(alert),把计算的结果输入(输入结果)

  1. var year = prompt('请输入您的出生年份');
  2. var age = 2021 - year;
  3. alert('您今年' + age + '岁啦!');

案例2:简单加法器

计算两个数的值,用户输入第一个值后,继续弹出第二个输入框并输入第二个值,最后通过弹出窗口显示出两次输入值相加的结果
案例分析:
1. 先弹出第一个输入框,提示用户输入第一个值,保存起来
2. 先弹出第二个输入框,提示用户输入第二个值,保存起来
3. 把这两个值相加,并将结果赋给新的变量(注意数据类型转换)
4. 弹出警示框(alert),把计算的结果输出(输出结果)

  1. var num1 = prompt('请输入第一个值');
  2. var num2 = prompt('请输入第二个值');
  3. var result = parseInt(num1) + parseInt(num2);
  4. alert(result);