虽然 Javscript Array 是对象,typeof [] == 'object',但作为系统内置的对象类型并不同于我们自己建造的对象。
如下代码:
Array.prototype.custom=function(){
alert('custom');
};
var f=[1];
f.custom();
for(var i in f) {
alert(i +' - '+f[i]);
}
f['0']=2;
alert(f[0]);
f['a']=1;
//只打印用户设置属性
for(var i in f) {
alert(i +' - '+f[i]);
}
alert(f.length);
那么看一下 我们自己模拟的 Array :
function EmulateArray() {
this.length=0;
}
EmulateArray.prototype.substring=function(){alert(1);};
var x=new EmulateArray();
//把属性和方法都打出来了
for(var i in x) {
alert(i +'-'+x[i]);
}
那么总结一下,系统原生对象(特别Array) 和我们平常自己构造的对象的差异吧:
1.数组实际上是下标为属性,对应下标值为该属性值的对象,且属性能转成数字会自动转成下标数字
。(注意:平常对象属性值数字和数字字符串也不区分的,相当于数字作为属性时会转化成数字字符串)
2.for in 循环数组属性时,并不会列出数组的方法以及length属性,只会列出数组的所有用户设置属性(包括在Array类中的属性,方法),包括数字和非数字属性
,方法
3.length 实际上等于数组对象最大的数字属性值+1
4.当访问 f[x] 时,实际上就是访问 f对象的x属性,
5.同理,对于new String(),new Date(),new Number .... 对于 for in 更不会有任何输出
ps:关于Array 类型的判断:
1.直接判断构造函数
x && x.constructor === Array
缺点:在判断来自不同window,frame的数组对象时失效
2.鸭子判断 (duck judge)
x && typeof x.length === 'number' && typeof x.splice === 'function' &&
!x.propertyIsEnumerable('length')
缺点:不能100%判断
3.简洁的平台相关判断
x && Object.prototype.toString.call(x) === '[object Array]'
缺点:无标准规定
PS: 关于 object 属性方法的枚举
javascript 中 object 的 toString() ,toLocalString(),valueOf(),hasOwnProperty(),isPrototypeOf(),
propertyIsEnumerable() 都是不能枚举的内置方法。在 for in 语句中不能遍历到这些方法属性。
分享到:
相关推荐
JavaScript的Array.flat()函数深入探讨 功能概述 flat() 函数提供了将一组数组项串联成一个全新的数组并在函数完成后返回新数组的能力。由于这个函数产生了一个全新的数组,所以一旦函数完成操作后,任何包含在...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容。最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容。最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容。最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容;最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象以及...
接着,深入探讨了浏览器文档对象模型的发展,详细介绍了JavaScript对象的有关知识,包括对象的属性、方法和事件处理程序等内容。最后,细致地讲述了JavaScript核心语言,包括String,Math,Date和Array等核心对象...
在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String;复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array, Function, Date等等。...
前端开发中经常会遇到Array、Object、String、Number等数据处理,或者是防抖节流函数等性能优化亦或是 URL 参数处理、类型判断等等操作,为了提高开发效率,我将这些常见公共方法进行抽离并封装好,发布在 npm 上,...
但在详细探讨 Ajax 是什么之前,先让我们花几分钟了解 Ajax 做 什么。目前,编写应用程序时有两种基本的选择: 桌面应用程序 Web 应用程序 两者是类似的,桌面应用程序通常以 CD 为介质(有时候可从网站...
Array.flat() 此仓库探讨了用于展平数组的深层嵌套数组的各种实现安装npm i github:evanplaice/flat-demo测验npm run test用法const flatIterative = require ( 'flat-demo' ) . flatIterative ;const result = ...
在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C#...