ECMAscript数据类型的标准定义

Posted 柯柯冲基波keke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMAscript数据类型的标准定义相关的知识,希望对你有一定的参考价值。

数据类型分类

1.原始数据类型(值类型/基本数据类型)

  • number (NaN(isNaN & Object.is(判断两个值是否为同一个值Object.is(NaN,NaN)->true 不会强制转换))  Infinity)
  • string
  • boolean
  • null
  • undefined
  • symbol
    • 给对象设置唯一值属性(对象属性名的类型:字符串、Symbol)
    • Symbol.hasInstance/toStringTag/toPrimitive...
  • bigint
    • Number.MAX_SAFE_INTEGER/MIN_SAFE_INTEGER JS中的最大、最小安全数字
    • 数字后+n就是bigint类型的值,例如:9007199254740991n,bigint值保证我们超过安全数字,计算也可以准确
    • 服务器返回超大数字,我们可以把它转换为bigint再进行运算;运算完的结果变成字符串传给服务器

2.对象类型(引用数据类型)

  • 标准普通对象 {name:\'nihao\'}
  • 标准特殊对象  数组、正则、日期、错误...
  • 非标准特殊对象  原始值类型的值,基于构造函数模式new出来的实例对象 ( new Number(1) )
  • 可调用/执行对象 (函数对象) function

 

 

 

 

JS中数据类型检测

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

typeof

  • 检测的结果是一个字符串,字符串中包含了对应的数据类型
  • 局限性:
    • typeof null ->\'object\'
    • typeof 检测对象类型,除函数对象返回“function”,其余返回都是“object”,不能细分对象
    • typeof检测一个未被声明的变量,不会报错,而是返回"undefined"
  • 底层处理机制
    • 所有的数据类型值,在计算机底层都是按照二进制存储的(64位)
    • typeof检测数据类型,就是按照存储的二进制值进行检测:前三位是000的,都被认为是对象(如果对象内部实现了call()方法,则认为是函数,返回function),返回值为"object"
      • 000对象  / 1整数 / 010浮点数 / 100字符串 / 110布尔值 / 000000... null /-2^30 undefined
    • typeof由于使用二进制检测处理性能相对好一些

 

 

 

 

创建变量

var 变量 = 值 :

  1. 先创建值
  2. 声明变量declare
  3. 变量和值相关联 defined 赋值

a = b = 10 :

  1. 创建值10(存储在栈中)
  2. b = 10
  3. a = 10
  4. 正常顺序是从右到左,除非遇到优先级高的,则先执行高的操作

 

数据存储

  • j基本数据类型存放在栈内存中,引用数据类型存放在堆类型中
  • 二者的区别是堆只能用来存储数据,不能执行代码,而在栈中既可用来存储数据,又可以来执行代码
  • https://zhuanlan.zhihu.com/p/311196297?utm_source=qq 动图理解!

全局上下文中使用变量:

  1. 先看VO(G)中是否有
  2. 在看GO(G)中是否有
  3. 如果都没有则报错:变量未被定义

以上是关于ECMAscript数据类型的标准定义的主要内容,如果未能解决你的问题,请参考以下文章

深入JavaScript类型判定

js4数据类型类型转换

ECMAScript的数据类型有哪些?

JavaScript中typeoftoStringinstanceofconstructor与in

JS的数据类型

script