我们不要去纠结神马是内建对象,神马是內建构造器。到后来你们便会发现其实她们都是对象。

Array()是一个构建数组的內建构造器函数:

var arr = new Array(); 

与下面的是等效的:

var arr = []; //数组文本表识法

无论数组是以神马方式创建的,我们都可以照常向里面添加元素。

arr[0] = 1;
arr[1] = 2;
console.log(arr) // [1, 2]

当我们使用构造器函数Array()创建数组时,也可以通过传值的方式为其添加元素:

var arr = new Array(1,2,3,true);
console.log(arr); // [1,2,3,true] 

如果我们向构造器函数传递单个数字,她就会出现一个异常情况:

var arr = new Array(5);
console.log(arr); // [undefinedX5]

既然数组是有构造函数创建出来的,那她是不是一个对象呢,答案是肯定的!yes那就是一个对象!!!我们可以验证一下:

console.log(typeof arr); // Object

既然它是一个对象,那么他就继承了Object的所有属性和方法。

例如:constructor, prototype等等等等。。。。

当然数组还是有一些独特之处的:

  1. 数组的属性名是从0开始递增,并自动生成数值。

  2. 数组拥有一个记录元素数量的length属性。

   3. 数组在其父级对象的基础上创建了许多额外的內建方法。

我们来验证一下数组与对象的区别:

首先定义数组的时候会自动生成length属性,而一般对象是没有length属性的。

var a = [], b = {};
a.length;
b.length  // undefined

在为数组和对象添加以数字或非数字为键明的属性操作上两者没有神马区别:

a[0] = 1;
b[0] = 1;
a.child = 2;
b.child = 2;

length属性会随着数字键名的数量而更新,而忽略非数字键名。

我们也可以手动设置数组length属性,如果设置的数字大于数组元素的数量,剩余的部分会被空(undefined)所填充,相反如果设置的length属性小于当前数组元素的数量那么超出的元素会被自动删除。

数组的內建方法:

concat() 方法:

concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

var a = [1,2,3];
document.write(a.concat(4,5)); // [1,2,3,4,5]
var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"

var arr2 = new Array(3)
arr2[0] = "4"
arr2[1] = "5"
arr2[2] = "6"

document.write(arr.concat(arr2)) // [1,2,3,4,5,6]
var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"

var arr2 = new Array(3)
arr2[0] = "4"
arr2[1] = "5"
arr2[2] = "6"

var arr3 = new Array(2)
arr3[0] = "7"
arr3[1] = "8"

console.log(arr.concat(arr2,arr3)); // [1,2,3,4,5,6,7,8]

join() 方法:

join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的(默认为逗号,)。

var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"

document.write(arr.join()); // '1,2,3'
var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"

document.write(arr.join(".")); // '1.2.3'

push() 方法:

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度(注意是长度length,而不是返回新的数组)。

var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
console.log(arr.push(4)); 

pop() 方法:

pop() 方法用于删除并返回数组的最后一个元素。

var arr = new Array(3)
arr[0] = "1a"
arr[1] = "2a"
arr[2] = "3a"
console.log(arr.pop()); // 3a

reverse() 方法:

reverse() 方法用于颠倒数组中元素的顺序。

var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
console.log(arr.reverse()); // [3,2,1]

unshift() 方法:

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

var arr = new Array()
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
console.log(arr.unshift(4)); // [4,1,2,3]

shift() 方法:

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
console.log(arr.shift()); 

slice() 方法:

slice() 方法可从已有的数组中返回选定的元素。

请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

var arr = new Array(3)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
console.log(arr.slice(1)); // [2,3]
var arr = new Array(6)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[4] = "5"
arr[5] = "6"
console.log(arr.slide(2,5)); // [3,4,5]

splice() 方法:

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。

var arr = new Array(6)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[4] = "5"
arr[5] = "6"
console.log(arr.split(2,0,111)); [1,2,111,4,5,6]
var arr = new Array(6)
arr[0] = "1"
arr[1] = "2"
arr[2] = "3"
arr[3] = "4"
arr[4] = "5"
arr[5] = "6"
console.log(arr.split(2,3,888)); //[1,2,888,6]

sort() 方法:

sort() 方法用于对数组的元素进行排序。对数组的引用。请注意,数组在原数组上进行排序,不生成新的数组。

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
console.log(arr); // [1,10,1000,25,40,5]

上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:

function sortNumber(a,b){
  return a - b;
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
console.log(arr.sort(sortNumber)); //[1,5,10,25,40,1000] 

javascript 对象初探 (四)--- 内建对象之旅之Array的更多相关文章

  1. javascript——对象的概念——内建对象

    包括内建对象的所有对象都是Object对象的子对象. 1.Array():构建数组的内建构造器函数 例:创建数组方式有两种: 2.Boolean:是对象,与基本数据类型 布尔值 不相同 例:创建Boo ...

  2. 【JavaScript学习】-JS内置对象1-对象概述

    对象(object): JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和 方法.JavaScript 提供多个内建对象,比如 String.Date.Ar ...

  3. javascript:面向对象和常见内置对象及操作

    本文内容: 面向对象 常见内置对象及操作 首发日期:2018-05-11 面向对象: JavaScript 是面向对象的编程语言 (OOP).OOP 语言使我们有能力定义自己的对象和变量类型. 对象是 ...

  4. Python源码剖析——01内建对象

    <Python源码剖析>笔记 第一章:对象初识 对象是Python中的核心概念,面向对象中的"类"和"对象"在Python中的概念都为对象,具体分为 ...

  5. javascript内建对象

    内建对象等价于内建构造器内建对象大致分为三类:数据封装类对象--Object.Array.Boolean.Number和String工具类对象--Math.Date.RegExp等用于提供遍历的对象错 ...

  6. 哪个HTML5内建对象用于在画布上绘制?()

    哪个HTML5内建对象用于在画布上绘制?() getContent getContext getGraphics getCanvas 我的理解: A.C.D不存在HTML5,,js方法中 HTML 5 ...

  7. 18第一章 ASP.Net内建对象

    第一章        ASP.Net内建对象 第一章        ASP.Net内建对象 ASP.Net为保持用户的数据和信息,内建了许多对象,包括Application.Response.Requ ...

  8. JS-安全检测JavaScript基本数据类型和内置对象的方法

    前言:在前端开发中经常会需要用到检测变量数据类型的需求,比如:判断一个变量是否为undefined或者null来进行下一步的操作,今天在阅读“编写高质量代码-改善JavaScript程序的188个建议 ...

  9. jsp九个内置对象、四个域对象及Servlet的三大域对象

    一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...

随机推荐

  1. Lua 学习笔记(二)语法、类型、值

    首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码.Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者 ...

  2. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  3. kqueue用法简介

    1.什么是kqueue和IO复用 kueue是在UNIX上比较高效的IO复用技术. 所谓的IO复用,就是同时等待多个文件描述符就绪,以系统调用的形式提供.如果所有文件描述符都没有就绪的话,该系统调用阻 ...

  4. Gradify - 提取图片颜色,创建响应式的 CSS渐变

    被请求的HTTP对象之间的延迟会有一个时间段,这个期间网页看起来不完整.Gradify 可以分析出图像中4个最常见的颜色,创建一个梯度(或纯色)作为图片占位符.Gradify 可以在在任何图像发现最突 ...

  5. [C] 关于表达式求值

    结论是:在一个表达式中,如果两个相邻操作符的执行顺序由它们的优先级决定,如果它们的优先级相同,它们的执行顺序由它们的结合性决定.若出现前述规则描述之外的情形,编译器可以自由决定求值的顺序(只要不违反逗 ...

  6. 抓包分析SSL/TLS连接建立过程【总结】

    1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...

  7. Azure Automation (3) 定期将某个Azure订阅下的所有虚拟机开关机

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 在笔者之前的文章中,我们介绍了使用Azure Automation ...

  8. BP算法笔记

  9. Elasticsearch Span Query跨度查询

    ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Lucene中的SpanTermQuery以及其他的Query封装出的DSL,接 ...

  10. Twitter Bootstrap深受开发者喜爱的11大理由

    Bootstrap,作为创新技术框架,使开发者.设计者更容易.更快捷.更出色地完成网站及应用的搭建工作.如果你还没有使用Twitter Bootstrap,建议你去了解一下.Bootstrap为开发者 ...