先看prototype源代码,有这么一个函数
isArray: function(object) {
return object != null && typeof object == "object" && 'splice' in object && 'join' in object;
},
为什么判断一个对象是否为Array的方法里要同时验证splice和join?因为splice和join是Array对象独有的方法。
同样的一幕,也发生在jquery中,
makeArray : function(array) {
var ret = [], i;
if (array != null) {
i = array.length;
// The window, strings (and functions) also have 'length'
if (i == null || typeof array === "string"
|| jQuery.isFunction(array) || array.setInterval) {
ret[0] = array;
} else {
while (i) {
ret[--i] = array[i];
}
}
}
return ret;
},
这个函数先求出array.length,请注意array是个参数,不是数组!我们不妨把它理解成一个未知的对象。注释提到了 拥有length属性的对象除了Array,还有window、String和Function。(具体表示意义,可以查看《网页制作完全手册》和《JScript 语言参考》),里面的if语句刚好考虑了上面的三种情况:
- typeof array === "string" : 判读参数array是String对象;
- jQuery.isFunction(array) : 判读参数array是Function对象;
- array.setInterval : 判读参数array是window对象;
其中,“拥有setInterval的对象一定是window对象”可以作为一个思路,这也是刚开始提到的prototype判断未知对象是否为Array的方法。道理应该相同,我不知道我理解的对不对?
---------------
2009-7-8
---------------
关于判读某个对象是否为数组的另一种方法:
if (Object.prototype.toString.apply(value) === '[object Array]') {
//do sthing
}
以上代码摘自 http://www.json.org/json.js 大概第330行。
---------------
2009-8-1
---------------
《JavaScript语言精粹》谈到了如何精确地判断数组:
var is_array = function(value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
有关propertyIsEnumerable方法,可以查看js手册。
分享到:
相关推荐
JavaScript的核心部分提供了一系列属性和方法来帮助开发者进行字符串的通用操作,例如字符串的分割、大小写转换以及子字符串的操作等。 #### 二、字符串的创建 创建字符串主要有以下几种方式: 1. **直接量**:...
这种方法可以将生物多样性研究中的多个方面整合起来,形成一个系统、 hoàn整的物种界定方法。 整合分类方法的优点在于可以将多个学科领域的知识整合起来,形成一个多学科的分类系统。这使得物种界定更加准确和可靠...
有的观点强调学习习惯和方法的影响,如乐清市英华学校的定义,将学困生界定为智力正常但受制于学习习惯或环境因素,导致学业成绩低下的学生。另一些定义则更关注学习能力和心理状态,如某学校课题申报书中所提到的,...
城市最低生活保障对象界定中存在的问题及对策——基于辽宁省本溪市的调查分析,项溪媛,, 本文针对城市低保对象界定工作存在的问题:低保对象界定难;低保对象界定程序不完善;低保对象界定工作的监督体系不健全;...
最终,尽管当前的司法实践可能逐步淡化相关市场的界定,但相关市场界定在反垄断调查中仍然是不可或缺的程序。只有明确了市场边界,才能有效地进行竞争分析。因此,结合互联网行业的特性,重塑相关市场界定理论,是...
在JavaScript中,split()函数是一个非常实用的字符串处理方法,用于将字符串分割成子字符串数组。标准的split()方法允许用户通过一个特定的分隔符来分割字符串,但在很多实际编程场景中,我们需要按照多个分隔符对...
S指的是明确的目标对象(A选项正确),M是指用具体的数值来衡量目标(B选项正确),R意味着目标要基于现实(A选项正确)。 工作中遇到的异常可以分为可视性、找寻性和创造性异常(A、B、C选项正确)。在使用优选...
2. **界定问题的方法**: - **专注重要问题**:策划者需集中精力解决最关键的问题,像射击时瞄准目标,确保策略的精确度。 - **细分问题**:将大问题分解为小问题,便于逐一解决,这有助于创新思维的产生。 - **...
6. 对于无形资产的重置成本估算,核算法是一种常用方法,直接成本通常按照现行消耗量来计算,反映了当前条件下重新获取相同或类似无形资产的成本。 7. 评估过程中还需要考虑资产的实际状况,如建筑物的结构问题可能...
淫秽电子信息的属性界定及概念区分.pdf
在市场界定中,交叉网络效应意味着单一市场方法(将所有用户群体视为一个市场)和多市场方法(将不同用户群体分别界定为独立市场)的选择不再简单。一方面,用户群体间的紧密联系可能要求将它们视为一个相关市场,...
本资源摘要信息主要介绍了强制性产品认证目录描述与界定表中的电线电缆类产品,包括电线组件、交流额定电压3kV 及以下铁路机车车辆用电线电缆、额定电压450/750 V 及以下橡皮绝缘电线电缆等。 电线组件(0101) ...
因此,我们有必要调整现有的市场界定方法,或是开发出全新的方法来适应大数据产业的特性。这要求我们在界定相关市场时,综合考虑交叉网络效应、双边市场特点、数据的非对抗性和多归属性、免费模式和用户锁定效应等...
从企业价值链分析流程入手,对企业成本管理中的价值进行界定,提出价值链分析的价值集基础理论,且给出基于可拓学的物元、事元、关系元和复合元的价值表示方式,探讨价值集相关性分析的表示方法,为进一步分析研究企业...
在实际编程中,可能会使用MATLAB的优化工具箱中的`linprog`函数来解决松弛问题,为每个子区域计算下界。同时,需要设计有效的剪枝策略,以避免遍历所有可能的子区域,这通常涉及到近似算法或启发式方法。 总的来说...