- 变量:就是存储在里面的数据是随时可以变化的。
- 在使用变量之前,需要我们先声明变量,声明变量的关键字有三个,,var,let,const, var是ES6之前一直使用的声明方式,从ES6开始,新增了let和const
- 声明变量语法:
- 关键字 变量名。var i
- 如果通过var声明了变量,但是没有赋值,会输出undefined。
- 变量的声明和赋值是可以同时进行的,如果是第一个给变量赋值,那么这个过程叫做变量的初始化
- 可以一次声明多个变量
- 在声明变量的时候只能进行赋值操作,不能进行其他的运算操作
- 支持重复声明
- 重复声明没有赋值的情况下,会忽略该声明
-
- 支持遗漏声明
- 由于js是一门解释性语言(动态语言),所以声明好的变量可以存储任何类型
- let不支持重复声明和遗漏声明
- 变量提升
- 之所以现在不推荐使用var来声明变量,是因为var声明的变量存在一个变量提升,所谓变量提升,就是指将变量的声明提升至当前作用域的顶部。
- let声明的变量就不存在变量提升的问题
- var声明的变量不存在块级作用域
- 在其他静态语言里面,通过一对大括号{}可以定义一个块级作用域
- let声明就有这个块级作用域
- 常量:指不变的量,不可更改
- const:也是声明变量的一种方式,但是声明的变量不能改变。
- JS数据类型分类
- 基本数据类型(原始值,简单值)
- 简单值:指最简单的数据段,不可再拆分
- 常见的简单值:let i=5
- 简单值存储于栈区,因为原始数据所占的大小空间是固定的
- 数据复制的时候,是值的拷贝
- 基本数据类型(原始值,简单值)
- 进行比较的是值,也就是说值相等,那么这两个变量就相等
- 引用数据类型(复杂值)
- 指多个简单值所构成的数据,是可以拆分的
- 常见的复杂值:let arr=[1,”hello”]
- 复杂值存储于堆区,因为引用类型的数据大小不固定,所以无法在栈区开辟合适的空间。
- 数据复制的时候,是地址
-
- 进行比较的是地址,地址相等,才算是相等