一、js数据类型
- JS属于动态语言,弱类型语言
-
- 使用之前就确定其变量类型的是静态语言,在运行过程中需要检查数据类型的语言称为动态语言;支持隐式类型转换的语言称为 弱类型语言,反之为强类型语言
- js一共有八种数据类型(Bigint为新增的),分为两类(原始值和引用值),原始值有:Undefined、Null、Boolean、Number、Bigint、String和Symbol。引用值则是指对象Object
- 原始值类型的变量是保存在栈内存中的,它是按值来访问的的,我们操作的就是存储在变量中的实际值。如果在一个函数中声明一个原始值类型的变量,那么这个变量当函数执行结束之后会自动销毁。
- 引用值类型的变量,它的变量名也就是它的引用,是保存在栈内存中,而它的值是保存在堆内存中。它是按引用来访问的,也就是我们操作的实际上是对该对象的引用
- 确定数据类型的方法:typeof用来判断一个变量是否为原始值类型,更确切地说它是适合用来判断一个变量是否为字符串、数值、布尔值或者undefined,而对于null或者对象,它会返回object;instanceof可以用来判断引用值具体是什么类型的对象
二、变量声明、var、let和const
- var声明的范围是函数作用域,而let和const都是块级作用域。同时需要说明的一点是在全局作用域中使用var声明的变量会成为window对象的属性,let和const声明的变量则不会,但是在作用域链的解析上是一样的
- var声明的变量会提升,也即它声明的变量或被自动提升到函数或者全局作用于的顶部。严格情况下来说,let和const声明的变量也会被提升,但是由于“暂时性死区”(即在声明变量前的引用会出现referenceerror)的影响,实际上是不能在声明之前来使用let和const变量
- var允许在同一个作用域中重复声明同一个变量,let和 const不允许
- const的行为与let基本相同,唯一一个重要的区别是,使用 const声明的变量必须进行初始化,且不能被修改