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 变量 = 值 :
- 先创建值
- 声明变量declare
- 变量和值相关联 defined 赋值
a = b = 10 :
- 创建值10(存储在栈中)
- b = 10
- a = 10
- 正常顺序是从右到左,除非遇到优先级高的,则先执行高的操作
数据存储
- j基本数据类型存放在栈内存中,引用数据类型存放在堆类型中
- 二者的区别是堆只能用来存储数据,不能执行代码,而在栈中既可用来存储数据,又可以来执行代码
- https://zhuanlan.zhihu.com/p/311196297?utm_source=qq 动图理解!
全局上下文中使用变量:
- 先看VO(G)中是否有
- 在看GO(G)中是否有
- 如果都没有则报错:变量未被定义
以上是关于ECMAscript数据类型的标准定义的主要内容,如果未能解决你的问题,请参考以下文章