目录
前言
在计算机中,不同的数据所占用的存储空间是不同的,为了充分利用储存空间,在编程语言中定义了多种不同的数据类型。本节将对数据类型以及数据类型转换进行介绍。
一、变量的数据类型
JavaScript 是一种弱类型语言,不用提前声明变量的数据类型。在程序运行过程中,变量的数据类型会被自动确定。
- 强类型语言:如Java、C 等
- 弱类型语言:JavaScript 等
//强类型语言(Java)
int num = 10; //这里的变量 num 是 int 型(整数型)
//弱类型语言(JavaScript)
var num = 10; //这里的变量 num 一开始是一个数字型
num = 'abc'; //赋值一个字符串,现在 num 变成了字符串型
从以上代码可以看出,JavaScript 变量的数据类型,是在程序运行时根据等号右边的值来确定的。
二、数据类型分类
JavaScript中的数据类型分为两大类,基本数据类型和复杂数据类型(也称为引用数据类型),如图所示。
在本章节只讲述基本数据类型,复杂数据类型将会在后面讲述。
1、数字型
数字型(Number),包含整型值和浮点型值。
var num1 = 21; //整型值(整数)
var num2 = 0.21; //浮点型值(小数)
① 进制
常见的进制有二进制、八进制、十进制和十六进制,在一般情况下,数字都是使用十进制来表示的。
- 二进制数: 机器语言,由1和0组成,逢2进位。
- 八进制数: 在数字开头加上0,八进制数由0 ~ 7组成,逢8进位
//八进制数
var num1 = 07;
console.log(num1); // 输出结果:7
var num2 = 010;
console.log(num2); // 输出结果:8
- 十进制数: 是组成以10为基础的数字系统,有0~9组成,逢10进位
- 十六进制数: 在数字开头加上0x,十六进制数由0 ~ 9,a ~ f (或 A~F)组成。(在十六进制数中 “ x ” 和 “ a ~ f ” 不区分大小写)
//十六进制数
var num1 = 0x9;
console.log(num1); // 输出结果:9
var num2 = 0xa;
console.log(num2); // 输出结果:10
② 范围
数字型的最大值和最小值可以通过如下代码获得
- 最大值: 1.7976931348623157e+308
console.log(Number.MAX_VALUE); //输出结果:1.7976931348623157e+308
- 最小值: 5e-324
console.log(Number.MIN_VALUE); //输出结果:5e-324
在输出结果中,使用了科学计数法来表示。
③ 特殊值
- Infinity(无穷大) :
console.log(Number.MAX_VALUE * 2); // 输出结果:Infinity
- -Infinity(无穷小):
console.log(-Number.MAX_VALUE * 2); // 输出结果:-Infinity
- NaN(非数值):
console.log('abc' - 100); // 输出结果:NaN
- isNaN: 用来判断一个变量是否为非数字的类型,返回值为true表示非数字,false表示是数字
console.log(isNaN(12)); // 输出结果:false
console.log(isNaN('abc')); // 输出结果:true
2、布尔型
布尔型(Boolean),包含 true 和 false 两个布尔型值,表示事物的 “ 真 ” 和 “ 假 ”,通常用于逻辑判断。
console.log(true); // 输出结果:true
console.log(false); // 输出结果:false
当布尔型和数字型相加时,true 会转换成 1,false 转换成 0 。
console.log(true + 1); // 输出结果:2
console.log(false + 1); // 输出结果:1
3、字符串型
字符串型(String),用单引号或双引号包裹。
var str1 = ''; // 空字符串
var str2 = '单引号字符串'; // 单引号包裹的字符串
var str3 = "双引号字符串"; // 双引号包裹的字符串
① 单、双引号嵌套
在单引号字符串中可以直接写双引号,在双引号字符串中也可以直接写单引号,实例如下:
// 正确的语法
var str1 = 'I am a "programmer"'; // I am a "programmer"
var str2 = "I'm a 'programmer'"; // I'm a 'programmer'
// 常见的错误语法
// var str1 = 'I'm a programmer'; // 单引号错误用法
// var str2 = "I'm a "programmer""; // 双引号错误用法
// var str3 = 'I am a programmer"; // 单、双引号混用
② 转义符
在字符串中使用换行、Tab 等特殊符号时,可以用转义符来进行转义。转义符都是以 “ \ ” 开始的。
转义符 | 解释说明 | 转义符 | 解释说明 |
---|---|---|---|
\’ | 单引号 | \" | 双引号 |
\n | LF换行,n表示newline | \v | 跳格(Tab、水平) |
\t | Tab符号 | \r | CR换行 |
\f | 换页 | \\ | 反斜线(\) |
\b | 退格,b表示blank | \0 | Null 字节 |
\xhh | 由 2 位十六进制数字 hh 表示的 ISO-8859-1 字符。如 “ \x61 ” 表示 “ a ” | \uhhhh | 由 4 位十六进制数字 hhhh 表示的 Unicode 字符。如 “ \u597d ” 表示 “ 好 ” |
示例演示代码:
var str1 = 'I\'m a programmer'; // I'm a programmer
var str2 = 'I am a\nprogrammer' // I am a(换行)programmer
var str3 = 'C:\\JavaScript\\'; // C:\JavaScript\
var str4 = '\x61bc'; // abc
var str5 = '\u597d学生'; // 好学生
③ 字符串长度
字符串是有若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的 length 属性可以获取整个字符串的长度。
var str1 = 'I\'m a programmer';
console.log(str1.length); // 输出结果:16
var str2 = '我是程序员';
console.log(str2.length); // 输出结果:5
④ 访问字符串中的字符
字符串可以使用“ [index] ”语法按照 index(索引)访问字符,index 从 0 开始,一直到字符串的长度减 1 ,如果超过了 index 最大值,则返回 undefined 。
var str = 'I\'m a programmer';
console.log(str[0]); // 输出结果:I
console.log(str[1]); // 输出结果:'
console.log(str[15]); // 输出结果:r
console.log(str[16]); // 输出结果:undefined
⑤ 字符串拼接
多个字符串之间可以使用 “ + ” 进行拼接,如果数据类型不同,拼接前会将其他类型转成字符串,在拼接成一个新的字符串。
console.log('a' + 'b'); // ab
console.log('a' + 18); // a18
console.log('_' + true); // _true
console.log('12' + 14); // 1214
console.log(12 + 14); // 两个数字相加,结果为26(非字符串拼接)
在实际开发中,常将字符串和变量进行拼接。
var age = 18;
console.log('小明' + age + '岁'); //小明18岁
⑥ “显示年龄”案例
本案例需要弹出一个输入框,让用户输入年龄,输入后,点击“ 确定 ”按钮,会弹出一个警告框,显示内容为 “ 您今年 x 岁了 ”,x 表示刚才输入的年龄。
<script>
// 弹出一个输入框,让用户输入年龄
var age = prompt('请输入您的年龄');
// 将年龄与输出的字符串拼接
var msg = '您今年' + age + '岁了';
// 弹出警告框,输出程序的处理结果
alert(msg);
</script>
4、未定义型
未定义型(Undefined),只有一个值undefined。如果一个变量声明后没有赋值,则变量的值就是 undefined。
var a; // 声明变量a,未赋值,此时a就是undefined
console.log(a); // 输出结果:undefined
console.log(a + '_'); // 输出结果:undefined_ (字符串型)
console.log(a + 1); // 输出结果:NaN
5、定型
定型(Null),只有一个值null。我们可以给一个变量赋一个 null 值,null 一般用来表示空对象指针。
var b = null; // 变量b的值为null
console.log(b + '_'); // 输出结果:null_(字符串型)
console.log(b + 1); // 输出结果:1(b转换为0)
console.log(b + true); // 输出结果:1(b转换为0,true转换为1)
三、数据类型检测
当不确定变量或值是什么数据类型的时候,可以利用 typeof 运算符进行数据类型检测。
console.log(typeof 12); // 输出结果:number
console.log(typeof '12'); // 输出结果:string
console.log(typeof true); // 输出结果:boolean
console.log(typeof undefined); // 输出结果:undefined
console.log(typeof null); // 输出结果:object
在上述代码中,typeof 检测 null 值时返回的是 object ,而不是 null ,这是 JavaScript 最初实现时的历史遗留问题,后来被 ECMAScript 沿用下来。
typeof 运算符的返回结果是一个字符串,可以使用比较运算符 “ == ” 来判断 typeof 返回的检测结果是否符合预期。
var a = '12';
console.log(typeof a == 'string'); // 输出结果:true
console.log(typeof a == 'number'); // 输出结果:false
四、数据类型转换
数据类型转换是把某一种数据类型转换成另一种数据类型。例如,使用表单、prompt()等方式获取到的数据默认是字符串型的,不能直接进行简单的加法计算,需要转换成数字型才可以计算。
1、转换为字符串型
转换为字符串型的3种常见的方式:
- 利用 “ + ” 拼接字符串(最常用的一种方式)
- 利用 toString() 转换成字符串
- 利用 String() 转换成字符串
// 先准备一个变量
var num = 3.14;
// 方式1:利用“+”拼接字符串(最常用的一种方式)
var str = num + '';
console.log(str, typeof str); // 输出结果:3.14 string
// 方式2:利用toString()转换成字符串
var str = num.toString();
console.log(str, typeof str); // 输出结果:3.14 string
// 方式3:利用String()转换成字符串
var str = String(num);
console.log(str, typeof str); // 输出结果:3.14 string
在上述代码中,console.log()可以输入多个值,中间用 “ , ” 隔开。方法1是最常用的,这种方式属于隐式转换,而另外两种属于显示转换。隐式转换是自动发生的,当操作的两个数据类型不同时,JavaScript 会按照既定的规则来进行自动转换,针对不同的数据类型有着不同的处理方式。显示转换是手动进行的,也称为强制类型转换
注意:
- null和undefined无法使用 toSting()方式进行转换;
- 对于数字型的变量,可以在toString()的小括号中传入参数,来进行进制转换。例如,变量 num 的值为 5 ,则num.toString(2) 表示将 5 转为二进制,结果为 101 。
2、转换为数字型
转换为数字型的4种常见的方式:
- 使用 parseInt() 将字符串转为整数
- 使用 parseFloat() 将字符串转为浮点数
- 使用 Number() 将字符串转为数字型
- 利用算术运算符 (-、*、/) 隐式转换
// 方式1:使用parseInt()将字符串转为整数
console.log(parseInt('78')); // 输出结果:78
// 方式2:使用parseFloat()将字符串转为浮点数
console.log(parseFloat('3.94')); // 输出结果:3.94
// 方式3:使用Number()将字符串转为数字型
console.log(Number('3.94')); // 输出结果:3.94
// 方式4:利用算术运算符(-、*、/)隐式转换
console.log('12' - 1); // 输出结果:11
在将不同类型的数据转换为数字型时,结果不同。
待转数据 | Number()和 隐式转换 | parseInt() | parseFloat() |
---|---|---|---|
纯数字字符串 | 转成对应数字 | 转成对应数字 | 转成对应数字 |
空字符串 | 0 | NaN | NaN |
数字开头的字符串 | NaN | 转成开头数字 | 转成开头数字 |
非数字开头字符串 | NaN | NaN | NaN |
null | 0 | NaN | NaN |
undefined | NaN | NaN | NaN |
false | 0 | NaN | NaN |
true | 1 | NaN | NaN |
在转换纯数字时,会忽略开头的 0,如字符串 “ 0123 ”会被转换成 123 。数字开头由 “ + ”,会被当成正数,数字开头由 “ - ”,会被当成负数。
console.log(parseInt('03.14')); // 输出结果:3
console.log(parseInt('03.94')); // 输出结果:3
console.log(parseInt('120px')); // 输出结果:120
console.log(parseInt('-120px')); // 输出结果:-120
console.log(parseInt('a120')); // 输出结果:NaN
console.log(parseInt('F', 16)); // 输出结果:15
在上述代码中,使用 parseInt() 可以利用第 2 个参数设置转换进制,如将字符 “ F ” 转换为十六进制,结果为 15 。
案例-“计算年龄”
要求在页面中弹出一个输入框,提示用户输入出生年份,利用出生年份计算用户的年龄。
<script>
var year = prompt('请输入您的年龄');
// 由于year是字符串,需要进行转换
var age = 2021 - parseInt(year);
alert('您今年已经' + age + '岁了');
</script>
案例-“简单加法器”
要求在页面中弹出两个输入框,分别输入两个数字,然后返回两个数字相加的结果。
<script>
var num1 = prompt('请输入第一个数:');
var num2 = prompt('请输入第二个数:');
var result = parseFloat(num1) + parseFloat(num2);
alert('计算结果是:' + result);
</script>
3、转换为布尔型
转换为布尔型使用 Boolean(),在转换时,代表空、否定的值会被转换为 false,如空字符串、0、NaN、null和undefined,其余的值转换为 true。
console.log(Boolean('')); // 输出结果:false
console.log(Boolean(0)); // 输出结果:false
console.log(Boolean(NaN)); // 输出结果:false
console.log(Boolean(null)); // 输出结果:false
console.log(Boolean(undefined)); // 输出结果:false
console.log(Boolean('小白')); // 输出结果:true
console.log(Boolean(12)); // 输出结果:true
总结
本节介绍了JavaScript 中最基础的语法知识,如数据类型的概念以及数据类型的转换。
尾注
希望这篇文章对你有所帮助,记得转载、点赞、收藏,支持一下,小编将会持续更新哦