初步探索JS数据类型
首先,恭喜华为前端全栈培养计划进入了第二阶段,接下来的几个阶段也要加油,把知识巩固复习强化。在第一阶段复习了css+html,感觉一下子就加深了好多印象。同时也希望华为classroom可以越来越好。好了,下面来分享JS数据类型部分:
先来说下JS的堆栈内存:
内存的概念:
ECStack :栈内存,供代码自上而下执行,存储基本类型值,执行环境栈
EC(G)全局执行上下文
VO(G)存放全局变量对象的地方
Heap :堆内存,是一个16进制的地址,存储引用类型值
所谓堆栈内存,其实就是在计算机内存中分配出来的一块空间,用于执行和存储代码的
let a=12;
创建12这个值,存放到栈内存中(栈内存是用来执行代码和存储基本类型值的)
创建变量a存储到VO(G)
最后让a指向12这个值(=赋值的意思就是值的指向)
堆内存:
let obj={xxx:'xxx'}
创建对象值(引用数据类型不能直接存储到栈内存中)
把对象中的键值对存储到堆中
把堆内存的地址存放到栈内存中,供变量指向
创建变量obj,存储到VO(G)
让obj指向堆内存的地址
后期obj.xxx的所有操作,都是先基于地址找到堆内存,从而来操作堆内存中的内容
引用数据类型(对象函数):
引用数据类型的结构相对复杂,(一个综合体,包含多种值),不能直接存储在栈内存中,需要单独开辟空间来存储,这个空间就是“堆内存”
引用类型值都要先转换(隐世类型转换)为字符串在转换为数字
数据类型检测:
typeof [value] 检测数据类型的运算符,返回结果是一个字符串(字符串中包含了数据类型)
typeof细节点:
typeof 检测的结果首先是一个字符串,字符串中包含了对应的数据类型(“number”、“string”、“boolean”、“undefined”、“object”、 “function”、“symbol”、“bigint”)
特殊的检测结果:
NaN / Infinity 都是数字类型,检测出来的结果是“number”
typeof null 的结果是“object”
typeof 普通对象 / 数组对象 / 正则对象...结果都是“object”,这样就无法基于typeof区分是普通对象还是数组对象
由于typeof返回的结果永远是一个字符串,所以连续出现两个以上typeof检测的时候,最后结果都是“string”
typeof 12 =>"number"
typeof "zhufeng" =>"string"
typeof [1,2] ==>"object"
typeof undefined =>"undefined"
typeof function(){} =>"function"
typeof null =>“object” 但是null并不是对象
let num=10,
num2=new Number(10);
let arr=[10,20],
obj={xxx:"xx"};
alert会把所有要输出的值转换为字符串(隐性转换),字符串拼接也是
- 点赞
- 收藏
- 关注作者
评论(0)