javascript数据类型
javascript 有那些数据类型,他们分别是什么?
JavaScript一共有八种数据类型
分别是 undefined
,null
,boolean
,number
,string
,object
,symbol
,bigInt
symbol
创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突问题.let s = Symbol()
typeof s // 'symbol'
const obj = {};
let a = Symbol('a');
let b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
const objectSymbols = Object.getOwnPropertySymbols(obj);
objectSymbols // [Symbol(a), Symbol(b)]
Object.getOwnPropertySymbols()
是获取对象所有Symbol
属性名的方法, 使用for...in
循环和Object.getOwnPropertyNames()
都获取不到Symbol
键名bigInt
是一种数字类型,它可以表示任意精度格式的整数栈: 原始数据类型(
undefined
,null
,boolean
,number
,string
)堆: 引用数据类型(
object
,array
,function
)
数据类型检测方式
typeof
console.log(typeof 数据) // 类型
其中数组,对象,null都会被判定为object, 其他的都正确
instanceof
console.log(数据 instanceof 类型) // true or false
可以正确判断对象的类型, 其内部机制是判断在其原型链中是否能找到该类型的的原型, 缺点不能判断基本数据类型
constructor
console.log((数据).constructor === 类型) // true or false
constructor 有两个作用,一是判断数据的类型,二是对象实例通过constrcutor 对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor 就不能用来判断数据类型了
Object.prototype.toString.call()
console.log(Object.prototype.toString.call(数据)) // [object 类型] : string
<script>
setTimeout(() => {
setTimeout(() => {console.log('延迟')},0)
document.addEventListener('click',() => {
console.log('点击')
})
},3000)
</script>
var,let,const 区别
- var
- 可以重复声明
- 变量提升,在全局作用域下声明的变量会挂载到window对象上
- let
- 禁止重复声明
- 暂时性死区
- 块级作用域
- const
- 同let
- 定义的变量不能修改指针, 但是可以修改里面的值
普通函数,箭头函数的区别
- 声明方式不同
- this指向不同
- 箭头函数没有自己的arguments
- 箭头函数不能作为构造函数使用
- 箭头函数调用call,apply,bind无法改变this指向
- 箭头函数没有原型
- 箭头函数只能是匿名函数,可以通过声明变量的方式命名