Home  >  Article  >  Web Front-end  >  Summarize 4 ways to determine the type of js array

Summarize 4 ways to determine the type of js array

伊谢尔伦
伊谢尔伦Original
2017-07-18 11:42:451732browse

JS method to determine array type

One of the methodsinstanceof

instance , as the name suggests, instance, example, so instanceof is used to determine whether a variable is an instance of an object. It is a ternary operator---the most substantial difference from typeof

a instanceof b? alert("true"):alert("false") //Note that the b value is the data type you want to judge, not a string, such as Array

For example:


var a=[];
console.log(a instanceof Array) //返回true

Method 2constructor

Definition in W3C definition: constructor attribute returns The reference to the array function that created this object

is the constructor corresponding to the returned object. The definition is not consistent with instanceof, but the effect is the same

For example: (a instanceof Array) //Is a an instance of Array? true or false

  (a.constructor == Array) // Is the constructor corresponding to an instance an Array? true or false

For example:


function employee(name,job,born){
 this.name=name;
 this.job=job;
 this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}

Then the method to judge various types is:


console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);

The more rigorous and universal method:


function isArray(object){
 return object && typeof object==='object' &&
   Array == object.constructor;
}

! ! Note:

When using instanceof and construcor, the array being judged must be declared on the current page! For example, a page (parent page) has a frame, and a page (child page) is referenced in the frame. An array is declared in the child page and assigned to a variable of the parent page. At this time, the variable is judged, Array == object.constructor; will return false;

Cause:

1. Array is reference data, and during the transfer process, only the reference address is transferred.
2. The address referenced by the Array native object of each page is different. The corresponding constructor of the array declared in the sub-page is the Array object of the sub-page; the parent page makes the judgment and uses the Array It is not equal to the Array of subpages; remember, otherwise it will be difficult to track the problem!

Method ThreeCharacteristic Judgment Method

The above methods all have certain flaws, but we must believe in the opinions of the people Wisdom is omnipotent, we can judge its type based on some characteristics of the array


function isArray(object){
 return object && typeof object==='object' && 
   typeof object.length==='number' && 
   typeof object.splice==='function' && 
    //判断length属性是否是可枚举的 对于数组 将得到false 
   !(object.propertyIsEnumerable('length'));
}

length and splice are not necessarily arrays, because they can Adding attributes to the object, rather than enumerating the length attribute, is the most important judgment factor.

ps: Popularize the propertyIsEnumerable method here:

object. propertyIsEnumerable(proName)

Determine whether the specified property is enumerable

Remarks: If proName exists in object and can be exhausted using a For...In loop, then the propertyIsEnumerable property returns true. The propertyIsEnumerable property returns false if the object does not have the specified property or if the specified property is not enumerable.

propertyIsEnumerable property does not consider objects in the prototype chain.

Example:


var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));

Method FourThe simplest method


function isArray(o) {
 return Object.prototype.toString.call(o) === ‘[object Array]‘;
}

The above is the detailed content of Summarize 4 ways to determine the type of js array. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn