首页IT科技数据的类型可以分为哪几种,并简单说明举例(数据类型)

数据的类型可以分为哪几种,并简单说明举例(数据类型)

时间2025-09-18 20:40:01分类IT科技浏览8547
导读:javaScript有哪些数据类型,有什么区别...

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可以正确判断对象的类型                        ,其内部运行机制时在原型链中能否找到该类型的原型                    。

console.log(2 instanceof Number); // false console.log(true instanceof Boolean); // false console.log(str instanceof String); // false console.log([] instanceof Array); // true console.log(function(){} instanceof Function); // true console.log({} instanceof Object); //true

  instanceof只能正确判断引用数据类型,而不能判断基本数据类型     。

  instanceof运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性                          。

(3)constructor

console.log((2).constructor === Number); // true console.log((true).constructor === Boolean); // true console.log((str).constructor === String); // true console.log(([]).constructor === Array); // true console.log((function() {}).constructor === Function); // true console.log(({}).constructor === Object); // true

  constructor有两个作用:一是判断数据的类型                      ,二是对象实例通过constructor对象访问的构造函数                            ,需要注意:如果创建一个对象来改变它们的原型     ,constructor就不能判断数据类型

function Fn(){}; Fn.prototype = new Array(); var f = new Fn(); console.log(f.constructor===Fn); // false console.log(f.constructor===Array); // true

(4)Object.prototype.toString.call()

   Object.prototype.toString.call() 使用Object对象的原型方法toString来判断数据类型:var a = Object.prototype.toString;

console.log(a.call(2)); //[object Number] console.log(a.call(true));    //[object Boolean]console.log(a.call(str));    //[object String]console.log(a.call([]));    //[object Array]console.log(a.call(function(){}));    //[object Function]console.log(a.call({}));    //[object Object]console.log(a.call(undefined));  //[object Undefined]console.log(a.call(null));    //[object Null]

判断数组的方式

通过Object.protottype.toString.call()
let obj = [1,2,3]Object.prototype.toString.call(obj).slice(8,-1) === Array
通过原型链
let obj = [1, 2, 3] console.log(obj.__proto__ === Array.prototype)
通过ES6的Array.isArray()
 fn() function fn() { let obj = [1, 2, 3] console.log(Array.isArray(obj)); }
通过instanceof
let obj = [1, 2, 3] console.log(obj instanceof Array);
通过Array.prototype.isPrototype()
let obj = [1, 2, 3] console.log(Array.prototype.isPrototypeOf(obj));

null和undefined的区别

undefinednull都是基本数据类型                  ,这两个基本数据类型都只有一个值                           ,就是undefined和null.

undefined代表的是未定义          ,null代表的是空对象                        。一般声明了变量但还没有定义的时候会返回undefined              ,null主要用于赋值给一些可能会对象的变量                          ,作为初始化。

使用typeof对undefin进行判断会返回undefined               ,使用typeofnull进行判断会返回Object                      。
console.log(null == undefined); //true console.log(null === undefined); //false

 0.1+0.2 !== 0.3,如何让其相等

let n1 = 0.1, n2 = 0.2 console.log(n1 + n2)    //0.30000000000000004

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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网站提高收录(掌握网站收录优化技巧,提升排名利器!) socket在哪层(在Express和Socket.IO中使用session)