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
十进制转各进制就是/该进制的余数倒过来...
- 十进制转二进制
- 别的进制同理
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)。
堆:先进先出
栈:先进后出
图示:
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>
图示: