判断js对象是否是数组
var a=new Array();
1. a instanceof Array; //true
2. a.constructor==Array; //true
3. 对支持isArray的浏览器
Array.isArray(a); //true
4. Object.prototype.toString.call(arg) === ‘[object Array]’;
5. 特性判断法
function isArray(object){
return object && typeof object==='object' &&
typeof object.length==='number' &&
typeof object.splice==='function' &&
//判断length属性是否是可枚举的 对于数组 将得到false
!(object.propertyIsEnumerable('length'));
}
有length和splice并不一定是数组,因为可以为对象添加属性,而不能枚举length属性,才是最重要的判断因子。
ps: 在这里普及下 propertyIsEnumerable 方法:
object. propertyIsEnumerable(proName)判断指定的属性是否可列举
备注:如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。
propertyIsEnumerable 属性不考虑原型链中的对象。
var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));
var a = ‘abc’ ;typeof a ;//string 判断值类型
*使用instaceof和construcor,被判断的array必须是在当前页面声明的!
比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false;
原因:
1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;切记,不然很难跟踪问题!
判断数组重复内容
思路
把数组变成字符串
循环原数组,拿每一个字段和这个字符串进行比对,看是否有重复
indexOf() 和 lastIndexOf() 对比法.
var arr = ["aa","bb","cc","bb","aa"];
arrRepeat(arr);
function arrRepeat(arr){
var arrStr = JSON.stringify(arr);
for (var i = 0; i < arr.length; i++) {
if (arrStr.indexOf(arr[i]) != arrStr.lastIndexOf(arr[i])){
return true;
}
};
return false;
}
数组中的字段,在由数组变成的字符串中的首次出现位置和最后一次出现位置是否一致,如果不一致,就说明这个重复出现了.
match() 正则对比方法
var arr = ["aa","bb","cc","bb","aa"];
arrRepeat(arr);
function arrRepeat(arr){
var arrStr = JSON.stringify(arr);
for (var i = 0; i < arr.length; i++) {
if ((arrStr.match(new RegExp(arr[i],"g")).length)>1){
return true;
}
};
return false;
}
原理是查找确定的重复次数,如果是大于1的话,就肯定是重复了.注意,这里是能够准确的查找出出现了几次的哦!
数组与字符串的相互转换
一、数组转字符串
需要将数组元素用某个字符连接成字符串
var a, b;
a = new Array(0,1,2,3,4);
b = a.join("-");
二、字符串转数组
实现方法为将字符串按某个字符切割成若干个字符串,并以数组形式返回
var s = "abc,abcd,aaa";
ss = s.split(",");// 在每个逗号(,)处进行分解。
toString()
可把数组转换为字符串,并返回结果。
语法
arrayObject.toString()