js的数组其实是特殊的对象。

这就导致:

typeof [1,2,3] === 'object'

[1,2,3] instanceof Object  和 [1,2,3] instanceof Array 都是true

但是注意 [1,2,3]  !=  {'0':1,'1':2,'2':3}, [1,2,3] != [1,2,3] 。因为对象之间的 == 与 ===是一样的。

那么要确切判断的话,经过我试验,可以使用以下规则:

[].__proto__ === Array.prototype

{}.__proto__ === Object.prototype

附带2个对象深拷贝方法。工程里的copy1和我写的copy2.当然copy2 在规模大点的时候,效率比copy1要高。

function copy1(obj){
var o;
if (obj == null || obj == undefined || typeof obj != 'object'){
o = obj;
}
else{
var s = JSON.stringify(obj);
o = JSON.parse(s);
}
return o;
}
function copy2(obj){
var re;
if(obj.__proto__ === Object.prototype ){
re = {};
for(var key in obj){
re[key] = copy2(obj[key]);
}
}else if(obj.__proto__ === Array.prototype){
re = Array(obj.length);
for(var i = 0;i < re.length;i++){
re[i] = obj[i];
} }else{
re = obj;
}
return re;
}

js 判断确切判断Array和Object的更多相关文章

  1. Javascript中判断变量是 array还是object(是数组还是对象)

    段文字是从github上截取由本人翻译过来的. 原文地址:https://github.com/nathansmith/javascript-quiz/blob/master/ANSWERS.md 怎 ...

  2. js 判断值为Array or Object的方法

    ①obj instanceof Array / Object ②Array.prototype.isPrototypeOf(obj) ③Object.prototype.toString.call(o ...

  3. Js判断参数(String,Array,Object)是否为undefined或者值为空

    在一些前端控件要提交数据到服务器端的数据验证过程中,需要判断提交的数据是否为空.如果是普通表单的字符串数据,只需要在 trim 后判断 length 即可,而这里需要的数据可以是各种不同的类型,通过 ...

  4. 判断 js 的 Array 和 Object

    https://my.oschina.net/ohcoding/blog/470952?p=1 var a = ['hello','world']; console.log(typeof a); // ...

  5. js如何判断一个对象是不是Array?(转载)

    js如何判断一个对象是不是Array? 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Nu ...

  6. 如何用js判断一个对象是不是Array

    .如何用js判断一个对象是不是Array 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Ob ...

  7. Javascript中判断变量是数组还是对象(array还是object)

    怎样判断一个JavaScript变量是array还是obiect? 答案: 1.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'. 此问题的一个可行的答案 ...

  8. this 、typeof、false、parseInt()、this、arguments、Array和object判断

    typeof typeof (undefined) 不会报错 undefined object Number boolean function String 返回值为字符串类型 false .fals ...

  9. js变量类型判断 严格通用 Object.prototype.toString.call()

    Object.prototype.toString.call()判断结果: Object.prototype.toString.call(true) "[object Boolean]&qu ...

随机推荐

  1. Mybaits 分页插件应用

    mybaits 分页插件省去了很多麻烦,接下来介绍如果应用分页插件 1.首先导入pagehelper.jar和jsplparser 2 在mybaits.xml中配置 <plugins> ...

  2. PLSQL导出表的数据insert语句

    “Where clause”可以设置查询条件.设置好文件导出的路径(“Output file”),点击[Export]按钮,就可以导出INSERT语句了. 导出之后使用nodepad打开: 但是如果我 ...

  3. PLSQL查看表创建语句

    在我们想要查看的表上右键选择view:

  4. idea报错及解决

    <b>root project 'test2': Web Facets/Artifacts will not be configured properly</b>Details ...

  5. 函数参数<二>

    1. 缺省参数 调用函数时,缺省参数的值如果没有传入,则被认为是默认值.下例会打印默认的age,如果age没有被传入: def printinfo( name, age = 35 ): # 打印任何传 ...

  6. LinkedHashSet 的实现原理

    原文:http://wiki.jikexueyuan.com/project/java-collection/linkedhashset.html LinkedHashSet 概述 思考了好久,到底要 ...

  7. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_2 请求参数绑定实体类型

    参数封装到javaBean对象中 创建新的包domain.在下面新建Account 实现序列化 的接口,定义几个属性 生成get和set.还有toString的方法 表单 重新发布tomcat jav ...

  8. argparse:命令行参数解析详解

    简介# 本文介绍的是argparse模块的基本使用方法,尤其详细介绍add_argument内建方法各个参数的使用及其效果. 本文翻译自argparse的官方说明,并加上一些笔者的理解 Copy im ...

  9. 在windows上远程访问服务器jupyter notebook

    需求: 之前在服务器上只能运行完整的python文件,而不能实现jupyter notebook的交互模式,通过在本地浏览器上远程访问服务器上的jupyter notebook,这样不就能有一个很棒的 ...

  10. 【VS开发】文件夹和文件选择EditBrowe控件使用

    让EditBrowse控件既能浏览文件,又能浏览文件夹... 下图是在http://www.codeproject.com/Articles/35722/MFC-Feature-Pack-CMFCEd ...