js的数据类型

Posted lizhiwei8

tags:

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

总体来讲有 五种基本类型,一个复杂类型,一个新增 symbol

一. 常见的数据类型有 es5

 1 基本类型:Number,String,Boolean,Null,undefined

  引用类型:object (Object,Array,Function,Date,RegExp)

 

2 基本的数据类型是不可以改变的,只有对象可以改变。

 (1) 基本数据类型的检测用typeof 操作符,所有的返回值都是字符串;可能有以下几种:‘undefined‘、‘boolean‘、‘string‘、‘number‘、‘object‘、‘function‘

 (2) 其中,使用 typeof 检测 object array date regexp 返回都是 object

            自定义函数或者构造函数返回的是 function

            null 返回的是object

  (3) null 和undefined 的区别

        1)null是一个对象,typeof返回object, 这个是js中的一个bug,在进行二进制转换过程中,如果前三位都是0,则ypeof时就返回object,而null转换为二进制时所用的位都是0

              undefined不是一个对象typeof 返回的是undefined

   2)null 是一个关键字,undefined不是关键字

   3)null 转化为数字是 0 ,undefined是NaN

Number(null) === 0 // true
isNaN(Number(undefined)) === true  // NaN

       4)定义不同

        javascript权威指南: null 和 undefined 都表示“值的空缺”,你可以认为undefined是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或在意料之中的值的空缺。

  null: Null类型,代表“空值”,代表一个空对象指针,使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。

  undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined。

  null是javascript的关键字,可以认为是对象类型,它是一个空对象指针,和其它语言一样都是代表“空值”,不过 undefined 却是javascript才有的。undefined是在ECMAScript第三版引入的,为了区分空指针对象和未初始化的变量,它是一个预定义的全局变量。没有返回值的函数返回为undefined,没有实参的形参也是undefined。

  null和undefined相同点

        1)都是值类型

   2)转化为Boolean都为false

Boolean(null) === false // true
Boolean(undefined) === false // true

 

  null 进行比较undefined

null == undefined // true
null === undefined // false

 

二. es6 新的数据结构 (参考 http://es6.ruanyifeng.com/#docs/set-map

   1.symbol 新引入的原始数据类型

      1)  通过 Symbol(dscription)声明 表示独一无二的值

      2)使用 typeof 检测为 symbol

      3) 不能和其他值进行运算,否则会有类型错误

      4)作为对象的key 要使用 放入 [ ] 中

   2.map weakMap set WeakSet 

    1)map  [ [a,b ],[ 2, 3] ]

     键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

    也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

               可以使用 size set get has delete clear keys values entries forEach

     2)set  

  新的数据结构,类似于数组。

  特点:成员值唯一,没有重复的值,不可使用数组的方法

      可以使用 add delete has size keys values entries forEach

  // 去除数组的重复成员
  [...new Set(array)]
// 字符串去重
  [...new Set(‘ababbc‘)].join(‘‘)

WeakSet 的成员只能是对象,而不能是其他类型的值 ,
WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中

    使用 typeof 检测为 object

     instanceof 可以进行区分 

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

JS-判断js数据类型的几种方式

js数据类型BigInt

js的数据类型有哪几种

01 JS的数据类型及如何判断数据类型

JS的基本数据类型

如何判断js中的数据类型