数据的类型可以分为哪几种,并简单说明举例(数据类型)
javaScript有哪些数据类型 ,有什么区别
javascript有八种数据类型:undefined, Null, Boolean, Number, String, Symbol, Biglnt ,Object 。
symbol和Biglnt是ES6新增的数据类型:
symbol代表创建后独一无二且不可变的数据类型 ,它主要是为了解决可能出现全局变量冲突的问题 。 Biglnt是一种数字类型的数据 ,它可以表示任意精度格式的整数 ,使用Bigint可以安全地存储和操作大整数 ,即使这个数已经超出了Number能够表示的安全整数范围 。这些数据类型分为基本数据类型和引用数据类型:
栈:基本数据类型(undefined ,Null ,Number ,String ,Boolean) 堆:引用数据类型(对象 ,数组 ,函数基本数据类型和引用数据类型的区别在于存储位置不同:
基本数据类型直接存储在栈(stack)中的简单数据段,占据空间小 ,是被频繁使用的数据 。 引用数据类型存储在堆(heep)中的对象 ,占据空间大,如果存储在栈中 ,会影响浏览器的性能;引用数据类型是在栈中存储了指针 ,该指针指向堆中的存储的对象浏览器会先检索栈中的地址 ,通过地址获得堆中的实体堆和栈存在于数据结构和操作系统内存中
数据结构中:
栈中的数据存取方式为先进后出 。 堆是一个优先队列 ,是按照优先级来进行排序的 ,优先级可以按照大小来规定 。操作系统内:
栈区内存由编译器自动分配释放 ,存放函数的参数值 ,局部变量的值等 。 堆区内存一般由开发者释放 ,若不释放 ,结束时可能时由垃圾回收机制(GC)回收 。数据类型检测的方式有哪些
(1)typeof
数组 ,对象 ,null都会被判断为object
(2)instanceof
instanceof可以正确判断对象的类型 ,其内部运行机制时在原型链中能否找到该类型的原型 。
instanceof只能正确判断引用数据类型,而不能判断基本数据类型 。
instanceof运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性 。
(3)constructor
constructor有两个作用:一是判断数据的类型 ,二是对象实例通过constructor对象访问的构造函数 ,需要注意:如果创建一个对象来改变它们的原型,constructor就不能判断数据类型
(4)Object.prototype.toString.call()
Object.prototype.toString.call() 使用Object对象的原型方法toString来判断数据类型:var a = Object.prototype.toString;
判断数组的方式
通过Object.protottype.toString.call()null和undefined的区别
undefined和null都是基本数据类型 ,这两个基本数据类型都只有一个值 ,就是undefined和null.
undefined代表的是未定义 ,null代表的是空对象 。一般声明了变量但还没有定义的时候会返回undefined ,null主要用于赋值给一些可能会对象的变量 ,作为初始化。
使用typeof对undefin进行判断会返回undefined ,使用typeof对null进行判断会返回Object 。0.1+0.2 !== 0.3,如何让其相等
toFixed(num)方法可以把Number四舍五入为指定小数位的数字 。
出现0.1+0.2 !== 0.3是因为计算机是通过二进制方式存储的 ,
isNaN和Number.isNaN函数的区别
函数isNaN接受参数 ,会尝试将这个参数转换为数值 ,任何不被转换为数值的值都会返回true ,因此非数字值也会返回true ,会影响NaN的判断。
函数 Number.isNaN 会首先判断传入参数是否为数字 ,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换 ,这种方法对于 NaN 的判断更为准确
Object.is()与比较操作符“=== ” ,“== ”的区别
使用双等号(==)进行相等判断时,如果两边的类型不一致 ,则会进行强制类型转化后再进行比较 。
使用三等号(===)进行相等判断时 ,如果两边的类型不一致时 ,不会做强制类型准换 ,直接返回 false 。
使用 Object.is 来进行相等判断时 ,一般情况下和三等号的判断相同 ,它处理了一些特殊的情况 ,比如 -0 和 +0 不再相等 ,两个 NaN 是相等的 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!