js数据类型以及判断获取数据类型,各种类型以及数据整理

开发过程中,总有一些情况,根据判断数据类型来区别执行后续操作,整理一下js的类型及类型的获取

数据类型

js的数据类型分为2种,分别是 基础类型引用类型

基础类型: 基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

number:数字类型(-∞到∞;-Infinity到Infinity;负无穷大到无穷大,)
string:字符串类型(的值一般用单引号或者双引号括起来)
boolean:布尔类型(值只有两个真或假,true或者false; 数字类型的0就是false,1代表true )
null:空类型,值只有一个:null;(形象点说,例如number类型有0,1,2等无数个数值,而null类型只有null一个值)
undefined:未定义,值只有一个:undefined,如果一个变量结果是undefined和一个数字运算,结果NaN,不是一个数字,无意义

引用类型: javascript的引用数据类型是保存在堆内存中的对象。

Object: 通俗点说 就是对象 {}
Array:数组 []
Function: 方法函数 function()
RegExp:正则表达式
Date:时间类型

不知道是啥类型 先整理上,后续回展开调研,小白请忽略此区域

Arguments:是一个对应于传递给函数的参数的类数组对象。(官方是这么说的)
Error:var x=1a 错在变量不能以数字开头(我是一脸懵)

说明
① NaN是数字类型的,但是它又可以用isNaN()检测,isNaN() 函数用于检查其参数是否是非数字值

console.log(typeof(NaN) )    // number
console.log(isNaN(NaN) )   // true

②Infinity是数字类型的,代表无穷大
③Blob 是一种Javascript的对象类型。而实际上 、File 对象只是 blob 对象的一个更具体的版本,Blob 存储着大量的二进制数据,并且 Blob 的 size 和 type 属性,都会被 File 对象所继承
④什么情况下的结果是undefined
--变量申明了,没有赋值,结果是undefined
--函数没有明确返回值,如果接收了,结果也是undefined

数据类型与引用类型的区别

① 引用类型值可添加属性和方法,基本类型值不可以。
② 赋值变量值时
基本类型会在变量对象上创建一个新值,再复制给新变量。此后,两个变量的任何操作都互不影响
引用类型是将存储在变量对象的值复制一份给新变量,但是两个变量的值都指向存储在堆中的一个对象,牵一发而动全身

获取数据类型的方法

typeof: 根据typeof判断对象也不太准确

表达式                       返回值
typeof undefined           'undefined'

typeof null                'object'

typeof true                'boolean'

typeof 123                 'number'

typeof "abc"               'string'

typeof function() {}       'function'

typeof {}                  'object'

typeof []                  'object'

Object.prototype.toString.call: 建议使用此方式

// Boolean 类型,tag 为 "Boolean"
Object.prototype.toString.call(true);            // => "[object Boolean]"

// Number 类型,tag 为 "Number"
Object.prototype.toString.call(1);               // => "[object Boolean]"

// String 类型,tag 为 "String"
Object.prototype.toString.call("");              // => "[object String]"

// Array 类型,tag 为 "String"
Object.prototype.toString.call([]);              // => "[object Array]"

// Arguments 类型,tag 为 "Arguments"
Object.prototype.toString.call((function() {
  return arguments;
})());                                           // => "[object Arguments]"

// Function 类型, tag 为 "Function"
Object.prototype.toString.call(function(){});    // => "[object Function]"

// Error 类型(包含子类型),tag 为 "Error"
Object.prototype.toString.call(new Error());     // => "[object Error]"

// RegExp 类型,tag 为 "RegExp"
Object.prototype.toString.call(/\d+/);           // => "[object RegExp]"

// Date 类型,tag 为 "Date"
Object.prototype.toString.call(new Date());      // => "[object Date]"

// 其他类型,tag 为 "Object"
Object.prototype.toString.call(new class {});    // => "[object Object]"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。