数据类型有哪些?如何判断一个数据是否是数组

9 篇文章 0 订阅

数据类型有哪些?如何判断一个数据是否是数组

一、js中判断数据类型的方法

js的七种数据类型:number、string、boolean、undefined、object、null、symbol和函数类型function。

方法一:typeof , 无法检验出数组、对象或null

typeof 2 //  number
typeof null //   object
typeof {} //   object
typeof [] //   object
typeof(function() {}) //  function
typeof undefined //  undefined
typeof '222' //   string
typeof true // boolean

方法二:instanceof ,只能用来判断数组和对象,不能判断string和boolean类型,数组也属于对象。

 var o = {
   'name': 'lee'
 };
 var a = ['reg', 'blue'];

 console.log(o instanceof Object); // true
 console.log(a instanceof Array); //  true
 console.log(o instanceof Array); //  false

由于数组也属于对象,不能区分是数组还是对象,改进:封装一个方法判断数组和对象

var o = {
  'name': 'lee'
};
var a = ['reg', 'blue'];

var getDataType = function(o) {

  if (o instanceof Array) {
    return 'Array'
  } else if (o instanceof Object) {
    return 'Object';
  } else {
    return 'param is no object type';
  }
};

console.log(getDataType(o)); //Object。
console.log(getDataType(a)); //Array。

方法三:constructor方法

var o = {
  'name': 'lee'
};
var a = ['reg', 'blue'];
console.log(o.constructor == Object); //true
console.log(a.constructor == Array); //true

方法四:toString()判断string和boolean类型

var o = {
  'name': 'lee'
};
var a = ['reg', 'blue'];

function c(name, age) {

  this.name = name;
  this.age = age;

}
var c = new c('kingw', '27');
console.log(Object.prototype.toString.call(a)); //[object Array]
console.log(Object.prototype.toString.call(o)); //[Object Object]
console.log(Object.prototype.toString.call(c)); //[Object Object]

二、特殊值的相等于严格相等比较

(function() {

  console.log(null == undefined) // 输出:true
  console.log(null === undefined) // 输出:false
  console.log(null === null) // 输出:true
  console.log(undefined === undefined) // 输出:true
  console.log(NaN == undefined) // 输出:false
  console.log(NaN == null) // 输出:false
  console.log(NaN == NaN) // 输出:false
  console.log(NaN === NaN) // 输出:false

})()

三、字符串相等(), 严格相等(=)运算符

在进行相等(==)运算比较时,如果一边是字符,一边是数字,会先将字符串转换成数字再进行比较;

严格相等(===)则不会进行类型转换,会比较类型是否相等;注NaN与任何值比较时都是false。

四、字符串大小的比较,大于(>), 小于(<)运算符

javascript字符串在进行大于(小于)比较时,会根据第一个不同的字符的ascii值码进行比较,当数字(number)与字符串(string)进行比较大小时,会强制的将数字(number)转换成字符串(string)然后再进行比较。

五、JS判断一个变量是否是数组类型

1、instanceof操作符

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

obj instanceof Object; //true 实例obj在不在Object构造函数中

var arr = [1, 2, 3, 1];
alert(arr instanceof Array); // true

2、对象的constructor属性

var arr = [1, 2, 3, 1];
alert(arr.constructor === Array); // true

第2种和第3种方法貌似无懈可击,但是实际上还是有些漏洞的,当你在多个frame中来回穿梭的时s候,这两种方法就亚历山大了。由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的,因此导致上述检测代码失效!

3、Object.prototype.toString (用来区分null和array类型)

function isArrayFn(o) {
  return Object.prototype.toString.call(o) === '[object Array]';
}
var arr = [1, 2, 3, 1];

alert(isArrayFn(arr)); // true 

call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是’[object Array]',以判断其是否是Array的实例。

4. Array.isArray()(能用isArray就用它来判断是否属数组)

ECMAScript5将Array.isArray()正式引入JavaScript,目的就是准确地检测一个值是否为数组。IE9+、 Firefox 4+、Safari 5+、Opera 10.5+和Chrome都实现了这个方法。但是在IE8之前的版本是不支持的。

var arr = [1, 2, 3, 1];
var arr2 = [{
  abac: 1,
  abc: 2
}];

function isArrayFn(value) {

  if (typeof Array.isArray === "function") {
    return Array.isArray(value);
  } else {
    return Object.prototype.toString.call(value) === "[object Array]";
  }

}
alert(isArrayFn(arr)); // true 
alert(isArrayFn(arr2)); // true 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值