JavaScript 基本数据类型以及如何进行判断

JavaScript 有以下几种基本数据类型

  • Boolean
    有两个值 true 和 false
  • Null
    只有一个 null 值
  • Undefined
    一个没有被赋值的变量会有个默认值 undefined
  • Number
    表示数字,整数浮点数都行,还有一些带符号的值 +Infinity,-Infinity 和 NaN(非数值,Not-a-Number)

要检查值是否大于或小于 +/-Infinity,你可以使用常量 Number.MAX_VALUE 和 Number.MIN_VALUE。另外在 ECMAScript 6 中,你也可以通过 Number.isSafeInteger() 方法还有 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 来检查值是否在双精度浮点数的取值范围内。 超出这个范围,JavaScript 中的数字不再安全了,也就是只有 second mathematical interger 可以在 JavaScript 数字类型中正确表现。

  • String
    用于表示文本数据,是一组 16 位的无符号整数值的‘‘元素’’,每个字符占据字符串的位置,第一个元素的索引为 0,下一索引为 1,依次类推。

  • Symbol
    符号类型是 ES6 新定义的,是唯一的并且不可修改的,并且也可以用来作为 Object 的 key 的值

  • Object
    对象可以被看作一组属性的集合

数组是一种使用整数作为键属性和长度属性之间关联的常规对象

不同数据类型之间怎么判断?

  • typeof 只能检测基本数据类型,对 null 有 bug,typeof null //object
  • instanceof 适用于检测对象,基于原型链运作
  • constructor 指向的时最初创建者,容易改写,不适合做类型判断
  • toString 适用内置的 JavaScript 类型。

如果要判断的时基本数据类型或 JavaScript 内置对象,使用toString
如果要判断的是自定义类型,使用instanceof

如何判断数组是数组?

  1. 使用 typeof 操作符来判断
Value               typeof
--------------------------
Undefined           undefined
Null                object
Boolean             boolean
Number              number
String              string
Symbol              symbol
Function Object     function
Any other Object    object         

数组,对象,null 等用 typeof 返回的都是 object 类型,我们并没有办法具体的区分。

  1. 使用 instanceof 判断
    instanceof 可以用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上。
const a = [];
const b = {};
console.log(a instanceof Array);  //true
console.log(a instanceof Object); //true,在数组的原型链上也能找到 Object 构造函数
console.log(b instanceof Array);  //fasle
  1. 用 constructor 判断
    实例化数组拥有一个 constructor 属性,这个属性指向生成这个数组的方法。
const a = [];
console.log(a.constructor); // Function Array

以上代码说明,数组是有一个叫 Array 的函数实例化的。

但是,constructor 属性是可以修改的,如果不小心改写了 constructor 属性的话,那么这种方法就无法真正判断出数组。

const a = [];
//改写 constructor 属性
a.constructor = Object;
console.log(a.constructor == Array); //false
console.log(a.constructor == Object); //true
console.log(a instanceof Array); //true 真正判断出

这种方法也不是非常靠谱。

  1. 用 Object 的 toString() 方法判断
    每一个继承自 Object 的对象都有 toString 的方法
const a = [1,2,3];
const b = {name:'bob',age:12};
Object.prototype.toString.call(a); //'[object Array]'
Object.prototype.toString.call(b); //'[object Object]'

这样我们就可以自己写一个方法来判断是否为数组

const isArray = (something)=>{
    return Object.prototype.toString.call(something) === '[object Array]';
}

cosnt a = [];
const b = {};
isArray(a);//true
isArray(b);//false
  1. 用 Array 对象的 isArray 方法判断
    这是目前最靠谱的方法了
const a = [1,2,3];
const b = {name:'bob',age:12};
Array.isArray(a); //true
Array.isArray(b); //false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值