- A+
所属分类:Web前端
变量
变量声明的几种方式
var
let
const
相同之处
-
var
let
const
都可以用来声明一个变量 -
都拥有函数作用域与全局作用域
不同之处
-
var
声明的变量有变量提升
而let
和const
声明的变量不会存在这个问题 -
var
没有块级作用域,let
、const
声明的变量具有块级作用域
块级作用域: if(true){ let name = 'let声明的变量'; const enums = 'const声明的变量' }
var
声明的变量是可以被重复定义的,let
声明的变量在同一个作用域中是 不可以重复声明, 但是可以重复修改,const声明的是一个常量,在规范上是不可以被重复定义重复修改的,但是当其变量的值为引用数据类型时,她所指向到堆
中的值是可以被重复修改的,如果要对一个值进行修改,建议使用let声明变量。
作用域
js中作用域分为: 全局作用域
函数作用域
块级作用域
作用域链
寻找当前变量一直从当前作用域寻找至全局作用域形成的链被称为作用域链
数据类型
基础数据类型[值全部存储在栈中]
- Number --- 数值
- String --- 字符串
- Boolean --- 布尔值
- Symbol --- 唯一值
- BigInt ---超出安全数值的值
- Undefined --- 未定义的值
- Null --- 未初始化的值
引用数据类型[引用数据类型存在堆中,键值存在栈中]
- Object --- 对象
- Array --- 数组
类型判断
基本数据类型
- 基本数据类型可以通过typeof 来进行判断是哪种基本数据类型
const str = '字符串' //string const num = 123 //Number const Boolean = true //Boolean const nul = null //Object const a = undefined //undefined const bigInt = BigInt(123n) //BigInt const sybmol = Symbol('asd') //Symbol
- Object.prototype.toString.call(xxx).slice(8,-1) //返回检测到的数据类型
- str.proto === String.prototype
引用数据类型
引用数据类型可以判断原型是否相等
手写类型判断
function getType(type) { if (typeof type === 'object') return Object.prototype.toString.call(type).slice(8, -1) return typeof type }