Symbol作用、对象枚举、数据检测类型方法、typeof底层原理及应用、

数据类型的分类

原始值类型

  • number
  • string
  • boolean
  • null
  • undefined
  • symbol
  • bigint

对象类型

  • 标准基础对象
  • 标准特殊对象 如:
    + new Array 数组
    + new RegExp 正则
    + new Date 日期对象
    + new Error 错误对象
    + Set/Map
  • 非标准特殊对象 如:
    • new Number()
  • 函数对象

symbol的作用

symbol用法:Symonl(‘描述’)

每个symbol调用的时候都会创建一个新的唯一值symbol,这里的描述只是为了我们自己方便区分辨识symbol,对symbol本身的值并没有任何影响

symbol的作用

  • 创建一个和其他值不相等的值
  • 可以给对象设置一个symbol类型的成员,
    var ary = [10,20]
    var sym = Symbol('sym')
    var obj ={
      [ary] : 'aryValue',
      [sym] :'symValue'
    }
    
    给对象添加symbol成员可以事先将一个symbol赋值给一个变量,然后[]包裹着变量给对象添加成员
  • 处理一些js底层机制

对象的枚举

  • Object.keys()
    返回一个对象的自身可枚举属性组成的数组

  • Object.getOwnPropertyNames()
    返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括 Symbol 值作为名称的属性)组成的数组。

  • Object.getOwnPropertySymbols()
    返回一个给定对象自身的所有 Symbol 属性的数组。

  • Reflect.ownKeys
    返回一个由目标对象自身的属性键组成的数组。

let keys = Object.getOwnPropertyNames(obj);  
keys = keys.concat(Object.getOwnPropertySymbols(obj));
let keys = Reflect.ownKeys(obj); //这一个操作,代替了上面两个操作「ES6新提供的方法」

数据类型检测的办法

  • typeof
  • instanceof
  • constructor
  • Object.prototype.toString.call

typeof的底层原理

  1. typeof 首先会获取值,如果变量没有声明,并不会报错,而是会返回’undefined’
  2. 查看这个值在计算机内存里面存储的二进制的数据,将二进制数据的最前面三个字符进行比对
    + 000 对象
    + 1 整数
    + 010 浮点数
    + 100 字符串
    + 110 布尔
    + 000000… null
    + -2^30 undefined
  3. 当检测出来是对象的时候,会去看是否实现了call方法,如果实现了就说明数据是一个函数对象,返回’function’,否则就是’object’
    因为null在计算机存储的二进制为64个0,所以typeof会把null当做对象识别,所以会返回object

typeof的应用

  • 检测除null以外的原始值数据类型(基于底层二进制进行判断,性能高)
  • 笼统检测数据是否为对象
  • 检测数据是否为函数
  • 处理浏览器兼容 「ES6+语法规范,都不兼容IE」 如:
    if (typeof Symbol !== 'undefined') { 当前浏览器支持Symbol} ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值