Skip to main content

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)

数据类型检测方式

  1. typeof

    console.log(typeof 数据) // 类型

    其中数组,对象,null都会被判定为object, 其他的都正确

  2. instanceof

    console.log(数据 instanceof 类型) // true or false

    可以正确判断对象的类型, 其内部机制是判断在其原型链中是否能找到该类型的的原型, 缺点不能判断基本数据类型

  3. constructor

    console.log((数据).constructor === 类型) // true or false

    constructor 有两个作用,一是判断数据的类型,二是对象实例通过constrcutor 对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor 就不能用来判断数据类型了

  4. 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 区别

  1. var
    • 可以重复声明
    • 变量提升,在全局作用域下声明的变量会挂载到window对象上
  2. let
    • 禁止重复声明
    • 暂时性死区
    • 块级作用域
  3. const
    • 同let
    • 定义的变量不能修改指针, 但是可以修改里面的值

普通函数,箭头函数的区别

  1. 声明方式不同
  2. this指向不同
  3. 箭头函数没有自己的arguments
  4. 箭头函数不能作为构造函数使用
  5. 箭头函数调用call,apply,bind无法改变this指向
  6. 箭头函数没有原型
  7. 箭头函数只能是匿名函数,可以通过声明变量的方式命名