在JS中,主要分为两大类型的数据,即基本数据类型和引用数据类型。
基本数据类型
数值型
在JS中,只要是跟数字相关的数据,都被归为一类,即数值类型的数据。它不像其他编程语言一样,对数字还有具体的划分,可以使用整数、小数、正数、负数。
let num1 = 10
let num2 = 10.05
let num3 = +20
let num4 = -20
console.log(typeof num1)
console.log(typeof num2)
console.log(typeof num3)
console.log(typeof num4)
但是,由于小数存在精度的问题,因此,有时候在进行小数计算的时候,结果可能不准确:
console.log(0.1 + 0.2)
字符串类型
使用双引号或单引号包裹起来的字符成为字符串。
let str1 = "hello world!"
let str2 = 'hello world!'
let str3 = `你好啊!`
console.log(typeof str1)
console.log(typeof str2)
console.log(typeof str3)
在ES6的最新语法中,引入了反引号,即字符串类型的定义可以使用反引号,使用该符号最大的好处就是方便字符的拼接以及模板的生成。
let num = 1234
let str = '1234'
console.log(num)
console.log(str)
在谷歌浏览器的开发者工具中,我们如果定义了字符串类型的数字,它和数值类型的数字是由区别的!
布尔类型
布尔类型的数据只有两个值:true和false,该类型的数据多用在条件的判断和多个值的比较当中中。
undefined
该类型的值比较特殊,有以下情况值为undefined:
- 声明变量但未对其进行赋值操作的
- 函数中没有return时的返回值
- 访问对象中不存在的属性
- 调用函数没有传递实参
null
该类型代表为空,本质上是一个对象。
console.log(typeof null)
null是一个值,可以保存在变量中,undefined也是一个值,但是它可以被浏览器自动赋值,它们的值也是相等的,但是数据类型不同。
console.log(undefined == null)
console.log(undefined === null)
复合数据类型
数组
数组是js中的一个复合数据类型,可以保存多个数据
let arr = ['pink', 'green', 'blue']
数组的访问是通过数组名[下标]的方式进行的
let arr = ['pink', 'green', 'blue']
console.log(arr[0])
console.log(arr[1])
console.log(arr[2])
函数
函数也是JS中的一种复合数据类型,使用fucntion关键字定义
function fun() {
console.log('你好啊!')
}
函数是一种封装了业务逻辑代码的代码块,通过一次性声明,多次调用(使用),从而提高程序的效率。
对象
js是一门基于对象的编程语言。任意一个数据都可以看成一个对象,包括数组和函数。
const obj = {
uname: '张三',
age: 24,
gender: '男',
sayHi: function () {
console.log('你好啊!')
}
}
使用字面量的形式定义一个obj对象。
数据的存储
以上两种数据是js的基本数据,但是不同类型的数据的存储方式也不同。对于基本的数据类型,会被存储到内存栈中,对于复杂的复合数据了类型,会被存储到内存堆中。
let num1 = 100
let num2 = num1
num2 = 200
console.log(num1) //100
从上面的代码中我们可以得出结果,num1的值还是100,这是因为num1和num2是两块独立的空间,当我们去修改num2中的数据,实际上并不会影响num1中的数据,这就是基本数据类型的存储方式。
let obj1 = {
uname: '张三',
age: 24
}
// 把obj1的数据给obj2
let obj2 = obj1
// 修改obj2的数据
obj2.uname = "山本"
console.log(obj1)
从上面的结果中,我们看到,修改了obj2中的数据,导致obj1中的数据也被修改了,这是因为,复合数据类型,在内存栈中只保存了一个内存地址,该地址指向了恩内存堆中的数据,当把obj1的值赋值给了obj2,实际上就是把这个内存地址给了obj2,那么此时的obj2也指向了内存堆中的数据,当我们去修改这个数据时,自然也会改变obj1,因为它们同时指向一个数据。这就是复合数据类型的存储方式。