javascript是判断对象是否是数组

JS中的数据类型:

2大类
 原始类型:值保存在变量本地的数据类型
  5种:Number String Boolean undefined null
  Number:8bytes 舍入误差-->四舍五入
  String:每个英文字符 1byte
      每个汉字字符 2bytes
      一旦创建内容不可改变
  Boolean: true false
引用类型:值不保存在变量本地的数据类型

  js中的变量 vs 数据库
   内存中    硬盘上的文件
   临时的    持久的
   客户端    服务器端只存一份

一般用typeof判断数据类型:如下>注意最后一个

console.log(typeof("Hello")); //string
console.log(typeof(123)); //number
console.log(typeof({a:1})); //object
console.log(typeof(function f(){})); //function
console.log(typeof([])); //object

为什么不是array呢?该如何判断一个对象是object还是array类型呢?

  typeof可以检测基本类型包括 undefined, string, number, boolean,但是对于检测对象就不靠谱了。

  不只是Array,javascript中的对象,包括 Date, String, Boolean, Number, Object, Function, Array, RegExp, Error 使用typof只会返回 "object"。

下面给出4中方法:

//如果当前浏览器的Array构造函数对象中不包含isArray
    if(!Array.isArray){
    //    为Array构造函数添加isArray方法
        Array.isArray=function(obj){
            //判断obj是不是数组类型4种
            //1. 如果Array.prototype在obj的原型链中
              //return Array.prototype.isPrototypeOf(obj);
            //2. 用instanceof: 语法:obj instanceof 构造函数名
            //return obj instanceof Array;
            //实例:一个构造函数创建出的每个具体对象
            //3. 原型对象的constructor属性
            //return obj.constructor==Array;
            //4. 利用Object原型的toString方法
            /*call,apply
                call,在调用方法的一瞬间更换调用方法的对象*/
            return Object.prototype.toString.apply(obj)=="[object Array]";
        }
    //
    }

注意:(来自https://segmentfault.com/q/1010000000130605)

使用 instanceof 或者 constructor 来检测 Array 也不是靠谱的办法。

如果是待检测的数组来自一个iframe的数组时,instanceof和contructor都会失效。

由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的。

var iframe = document.createElement(‘iframe‘);
  document.body.appendChild(iframe);
  xArray = window.frames[window.frames.length-1].Array;
  var arr = new xArray(1,2,3); // [1,2,3]
  arr instanceof Array; // false
  arr.constructor === Array; // false
时间: 2024-08-09 02:53:42

javascript是判断对象是否是数组的相关文章

Javascript判断对象是否为数组,并且数组元素对象

常规的有两种方式,第一种是jquery自带的方法,第二个是js原始方法 1. $.isArray(obj) 2. obj instanceof Array 实测发现两者确实可以判断对象是否为数组,但是只能判断简单对象的对象,对于复杂的jquery对象的数组却返回false,要判断jquery对象数组,我目前的做法是 typeof(obj) == "object" && obj.length > 1 //数组属于对象,并且数组length都大于1 另外jQuery封

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

js判断对象是否为数组

1.ECMAScript5中有一个现成的方法:Array.isArray(). var obj = {1:[1],2:[2]}, arr = [1], str = "1"; Array.isArray(obj) // return false Array.isArray(arr) // return true Array.isArray(str) // return false 2.instanceofinstanceof操作符用于判断对象是不是类的实例.使用方法是object ins

Javascript 中判断对象为空

发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是否为空,等价于检查对象中有没有键值对.写成代码,形如: if (isEmptyObject(obj)) { // obj is empty } else { // not empty } 至于 isEmptyObject 的实现,jQuery 中有一个很有想法的方式,请看代码: function i

判断对象是否为数组/函数

打印Object的prototype属性: 有一个toString方法,不同于一般变量的toString方法,当Object的toString方法执行时: 1.获取当前对象的[[Class]]属性的值; 2.返回 "[object " + 第一步得出的值+ "]"格式的字符串,例如[object Array], 解析: [[Class]]是一种内部属性,所有的对象(原生对象和宿生对象)都拥有该属性,描述该对象的类型 (值得注意的是[[Class]]的值只能是Obje

Javascript创建空对象和空数组的几个方法和差别

以下是三种创建空对象的方法: var emptyObj1 = {}; var emptyObj2 = new Object(); var emptyObj2 = Object.create(Object.prototype); 他们对Javascript来说是一样的,新创建的三个对象会继承object所有的属性和方法,所以emptyObj1.toString等于Object.prototype.toString.但是要注意,{}.toString是会报错的! 类似的还有空数组问题: var em

javascript基础 -- 判断对象类型 对象的深拷贝

在javascipt中,有array数组对象,object对象,正则对象,函数对象,typeof只能判断是对象,但是却不能判断属于何种对象. 记录一个方法用来判断对象属于那种对象: 使用Object.prototype.toString.call(elem).toLowerCase() 获取对象的类型,再使用 == 来判断是否该类型的对象. 看下图,对象是引用类型的值,所以当赋值一个对象的时候,不能象普通类型一样赋值,因为在引用类型赋值后,修改对象的值会直接修改到引用类型中的值,所以,赋值一个对

javascript jquery 判断对象为空的方式

java中存在很多空指针的问题,需要经常做预防和判断,如若不然,控制台出现恼人的异常,让人信心备受打击,早期写程序的时候没有经验,不能根据异常信息找到问题的根源,唯一做的事情就是祈祷,千万别出现什么异常信息啊!现在碰到与问题,到希望异常信息越详细越好,但偏偏事与愿违,我们所采用的框架居然把所有的异常全部throws 即使再controller获取也比较麻烦,一旦出现与预期不一样的结果,都不知道是哪里出了问题,调试起来确实不便. js中也是一样,虽然不会出现一大串异常代码,但控制台还是会有错误警告

Java判断对象类型是否为数组

判断对象是否为数组: public static void main(String[] args) { String[] a = ["1","2"]; if(a instanceof String[]){ System.out.println("ss") } if(a.getClass().isArray()){ System.out.println("yy") } } 第一种做法:instanceof java 中的inst