笔记-数组类型
来源:互联网 发布:计算机病毒 知乎 编辑:程序博客网 时间:2024/06/05 05:37
给定一个对象,判定其是否为数组是非常有用的,在ECMASript5中,可以使用Array.isArray()来做此事:
Array.isArray([]); //trueArray.isArray({}); //false但是在ECMAScript5之前,要区分数组和非数组是非常困难的,typeof用于数组结果是对象 object,使用instanceof操作符看下结果:
[] instanceof Array //true;({}) instanceof Array //false;貌似可以解决此问题,但是使用操作符instanceof的问题是Web浏览器中可能有多个窗口或窗体存在。每个窗口都有自己的javascript运行环境,有自己的全局对象。并且,每个全局对象都有一组自己的构造函数。因此一个窗体中的对象不可能是另外一个窗体中的构造函数实例。这也说明操作符instanceof不是可靠的数组检测方法。
解决方法是检测对象的类属性,对数组而言,该属性是Array,在ECMAScript3中这段函数可以这么写:
var isArray = Function.isArray || function(o) {return typeof o === 'object' &&Ojbect.prototype.toString.call(o) === '[object Array]';}其实上述代码也是ECMAScript5中 Array.isArray()所做的事情。
看到这段话,我突然想起Jquery源码关于isArray的表述:
isArray: Array.isArray || function( obj ) {return jQuery.type(obj) === "array";},
type: function( obj ) {return obj == null ?String( obj ) :class2type[ core_toString.call(obj) ] || "object";},core_toString = Object.prototype.toString,// Populate the class2type mapjQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {class2type[ "[object " + name + "]" ] = name.toLowerCase();});当我们看到这些代码时,是不是觉得就是刚才所描述那样实现的呢。
- 笔记-数组类型
- php手册 笔记 类型 -- 数组类型
- Java笔记之数组类型
- 【js学习笔记-044】-- 数组类型
- 【Scala学习笔记】类型参数化数组
- JAVA入门基础笔记-数组类型
- 数组类型
- 数组类型
- 数组类型
- 数组类型
- 数组类型
- C#学习笔记集合类型之数组(3)
- 1.golang学习笔记:数组是一种值类型
- 数组类型 out类型
- Java 数组类型(基本类型数组类型、封装类型数组类型、数组的数组类型)
- c#学习笔记--数组、枚举、结构、值类型和引用类型
- C# 引用类型-数组类型
- 数组类型指定为指定数组类型
- ubuntu samba服务器共享设置
- linux shell 笔记---变量
- 讲述下C++下深拷贝和浅拷贝
- 我的Android进阶之旅------>Android ListView 应用解析(使用ArrayAdapter,SimpleAdapter和SimpleCursorAdapter适配器)
- javascript 类中函数调用的that模式,避免this的丢失
- 笔记-数组类型
- Inventory Transactions Manager
- CREATESTRUCT与WNDCLASS的关系
- CREATESTRUCT-style
- 关于ES、PES、PS以及TS码流
- 0026算法笔记——【贪心算法】多机调度问题
- 简单的分页
- 关于信息查询和相关的数据库操作语句的写法
- 在PHP中使用MySQL扩展库操作数据库