手机版

JavaScript每天必须学习的数组和对象

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

对象部分

对象类型

对象是一个无序集合,可以容纳任何类型的对象,所有其他对象都是从这个对象继承的。

创建对象有两种类型,一种是使用新的运算符,另一种是文字符号。

1.使用新运算符创建Objectvar obj=new Object();//注意大写,也可以直接写成Object()。请注意,通过编写新对象()来创建新对象相当于obj={}。

2.使用文字方式创建:

var obj={ name : 'trigkit4 ',age : 21 };//最好添加分号。用文字量声明对象对象时,将不调用Object()构造函数(FF除外)

对象.原型对象

所有构造函数都有一个指向原型对象的原型属性。

object . prototype . print=function(){ console . log(this)};var obj=新对象();obj.print() //对象实例obj直接继承了Object.prototype 1的属性和方法。对象只是一种特殊的数据。对象有属性和方法。JavaScript是一种面向对象的语言,但是JavaScript不使用类。JavaScript基于[原型][1],而不是基于类。

2.属性:它是属于特定对象的变量。方法:它是一个只能由特定对象调用的函数。

3.js对象是属性和方法的集合。一种方法是作为对象成员的函数。属性是一个值或一组值(以数组或对象的形式),并且是对象的成员。

4.js对象基于构造函数。当构造函数创建一个新对象时,可以说是实例化了一个新对象。属性是构造函数中的变量。用构造函数实例化的对象:cat=new Animal();Javascript是一种基于对象的语言,你遇到的几乎所有东西都是对象。但是,它不是真正的OOP语言,因为它的语法中没有类。

脚本类型='text/javascript' //对象是名称/值对的集合,var browser={//对象是name3360' Firefox ',kernel3360' gecko'}用花括号括起来;/script //访问属性browser.name//'Firefox'浏览器['kernel']//'gecko '对象(objct)是属性的集合,每个属性由“名称/值对”组成,js也定义了一个

Js还定义了一个特殊的对象——函数,这是一个带有相关可执行代码的对象。它通过调用函数来执行代码,并返回操作结果。

JS中没有类,但是它取了一个新的名字叫做“原型对象”,所以‘class==prototype object’。有关详细信息,请参见:JavaScript类编写(1)

二、类(原型对象)和对象(实例)的区别和联系1。类(原型对象)是抽象的、概念性的,代表一类事物。2.对象是具体的、实用的,代表具体的事物。3.类(原型对象)是对象实例的模板,对象实例是类的个体。一个常见的误解是数字的字面不是一个对象。这是因为JavaScript解析器中的一个错误,该解析器试图将点运算符解析为浮点数值的一部分。

有很多方法可以让数字的文字值看起来像一个对象。2.toString();//第二个点可以正常解析。2 .toString();//注意点(2)前的空格。toString();//首先计算2

删除属性

删除属性的唯一方法是使用delete运算符;将属性设置为undefined或null并不会真正删除属性,只会删除属性和值之间的关联。

面向对象JavaScript的三个特点

封装:不考虑内部实现,只考虑函数使用的继承。从现有的对象中,继承了一个新的对象多态性。所谓多态指的是一个引用在不同情况下的多种状态。

1.包装

封装就是为了方便,把同类事物的共性(包括属性和行为)放在一个类中。例如,人们可以通过以下方式封装:

人{年龄(属性1)身高(属性2)性别(属性3)

做事(第一幕)走路(第二幕)说话(第三幕)

封装的好处:

封装保护内部数据的完整性;封装使对象重构更容易;弱化模块之间的耦合,提高对象的可重用性;有助于避免命名空间冲突;

请看下面的例子:

脚本类型=' text/JavaScript ' var boy={ };//创建一个空对象boy.name='小明';//根据原型对象的属性分配boy.age=12var girl={ };Girl.name='小红';女孩年龄=10岁;/script这是最简单的封装,将两个属性封装在一个对象中。然而,这篇文章有两个缺点。第一,如果生成的例子多,写起来会很麻烦;其次,没有办法看到实例和原型之间的联系。

构造函数模式

为了解决从原型对象生成实例的问题,Javascript提供了一种构造器模式。

所谓的‘构造函数’实际上是一个普通函数,但是这个变量是内部使用的。通过在构造函数上使用新的运算符,可以生成一个实例,并将此变量绑定到实例对象。

例如,男孩和女孩的原型对象现在可以这样写:

脚本类型='text/javascript '函数Person(姓名、年龄){ this.name=namethis.age=年龄;}/script我们现在可以生成实例对象。

脚本类型=' text/JavaScript' var boy=新人('小明',12);Var女孩=新人('小红',10);alert(boy . name);//小明机警(boy . age);//12/脚本这时,男生女生会自动包含一个构造函数属性,指向自己的构造函数。

alert(boy . constructor==Person);//真

alert(女孩.构造者);//输出整串构造函数代码,自己试试。原型模式下的Javascript规定每个构造函数都有一个指向另一个对象的原型属性。构造函数实例将继承此对象的所有属性和方法。

这意味着我们可以直接在原型对象上定义不变的属性和方法。

脚本类型='text/javascript '函数Person(姓名、年龄){ this.name=namethis.age=年龄;} person . prototype . type=' human ';person . prototype . eat=function(){ alert('吃米饭');}/script然后,生成实例:

脚本类型=' text/JavaScript ' var boy=new person('小明',' 12 ');Var girl=新人('小红',' 10 ');警惕(男孩.类型);//人类男孩. eat();//eat /script此时所有实例的type属性和eat()方法实际上是同一个内存地址,指向原型对象,从而提高了运行效率。警惕(男孩.吃==女孩.吃);//true prototype属性是一个内置属性,它指定对象扩展的构造函数。下面的代码向Animal构造函数添加了一个新的属性大小,这是cat对象的原型属性。通过使用prototype属性,扩展Animal构造函数的所有对象都可以访问size属性

猫=新动物(“猫”、“喵”、“走/跑”);cat . prototype . size=' fat ';在这种情况下,所有动物对象的大小属性都是“胖”。默认情况下,原型是对象的新实例。因为它仍然是一个对象,所以可以向该对象添加新的属性。正如样式是javascript的一个对象一样,您可以在样式之后继续添加属性。

脚本类型='text/javascript' /*定义了Person类*/functionperson (_ name,_ age,_ salary) {//person的公共属性,定义为:“this。属性名"这个。Name=_ name//Person类的私有属性定义为:“var属性名”var Age=_ agevar薪资=_薪资;//定义Person类的公共方法(特权方法),定义为:“this。函数名=function(){ 0.}”这个。show=function(){ alert(' age=' age ' \ t ' ' salary=' salary ');//允许在开放方法中访问类的私有属性。}/script对象在搜索某个属性时会首先遍历自己的属性,如果没有,会继续搜索[[Prototype]]引用的对象。[[原型]]等等。直到[[原型]].[[原型]]未定义(对象的[[原型]]未定义)

简单地说,对另一个对象的引用是通过对象的[[Prototype]]保存的,属性是通过这个引用向上搜索的,这就是原型链。

空目标

js给变量赋空值的功能是赋空指针,这让人们很容易理解这个变量已经准备好存储对象了。调整错误也很方便

全局窗口对象

JavaScript中的任何全局函数或变量都是窗口的属性。Self对象与window对象完全相同,self通常用于确认其处于当前形式。

窗口的主要对象如下:JavaScript文档对象JavaScript框架对象JavaScript历史对象JavaScript位置对象JavaScript导航器对象JavaScript屏幕对象

几种常见的方法valueof()方法:返回指定对象的原始值split()方法将字符串分成一个字符串数组并返回这个数组。indexOf()方法返回字符串中指定字符串值的第一次出现。substring()方法用于提取字符串中两个指定下标之间的字符。substr()方法从startPos位置开始的字符串中提取指定数量的字符串。join()方法用于将数组中的所有元素放入字符串中。arrayObject.join(分隔符)reverse()方法用于反转数组中元素的顺序。slice()方法可以从现有数组中返回选定的元素。

对象文字

对象文字用于创建包含大量属性的进程,如下所示:

脚本类型=' text/JavaScript ' var company={ name : ' Microsoft ',年龄: 39,员工: 99000,CEO : ' Nadella ' };/script这里需要注意的是,属性和属性值之间用冒号分隔(:);多个属性用逗号(,)分隔。一个对象的文字量也可以定义一个方法,只需要在对象的属性上写函数,这是一个匿名函数,只需要写它的方法名()就可以调用它。

脚本类型=' text/JavaScript ' var dog={ name : ' husky ',age:2,run : function(){ return ' 123 ';} } alert(dog . run());//如果输入dog.run,后面的函数部分会弹出代码/脚本基本值类型包装器。

js有五种基本值类型:数字、字符串、布尔值、null和undefined。除了null和undefined,其他三个都有所谓的基本包装对象。您可以使用内置的构造函数Number(),String()和Boolean()来创建包装对象。

var num=新数字(10);console . log(num的类型);//object Object()方法Object() //返回空对象Object(undefined) //返回空对象Object(null) //返回空对象Object(1) //相当于新的Number(1)Object('foo') //相当于新的String('foo')Object(true) //相当于新的Boolean(true)Object([]) //返回原数组Object({}) //返回原对象Object(function(){}) //返回原函数数组部分

1.1。数组对象

Array对象:支持创建任何数据类型的数组。arrayObj=新数组()arrayObj=新数组([大小])arrayObj=新数组([element0[,element1[,[,elementN]]]])

定义:var arr=[2,3,45,6];var arr=新数组(2,4,5,7)

两种定义没有区别,[]的性能高是因为代码短。

使用数组和对象文字:varatest=[];创建数组时,使用数组文字是一个不错的选择。同样,对象文字也可以用来节省空间。以下两行相等,但使用对象文字的行较短:

新对象;//尽量不要使用var oTest={ };//最佳选择,或者var 0Test=[];遍历为了获得遍历数组的最佳性能,建议使用经典for循环。

var list=[1,2,3,4,5,100000000];for(var i=0,l=list.lengthI l;I){ console . log(list[I]);}上面的代码有一个处理,就是通过l=list.length缓存数组的长度.

数组构造器

因为Array的构造函数在如何处理参数方面有些模糊,所以总是建议使用Array -[]-的字面语法来创建数组。

所以下面的代码会比较混乱:new Array(3,4,5);//结果: [3,4,5]新数组(3) //结果: [],这个数组的长度是3,所以尽量避免使用数组构造函数创建新数组。建议使用数组的字面语法。它们更短更简单,从而增加了代码的可读性。

数组数组的属性

数组数组有三个属性:长度属性、原型属性和构造函数属性

1.1 .长度属性

Length属性指示数组的长度,即数组中元素的数量。因为数组的索引总是从0开始,所以数组的上限和下限是0,长度是-1。与大多数其他语言不同,JavaScript数组的长度属性是可变的,需要特别注意。

2 .原型属性

返回对对象类型原型的引用。原型属性是对象共有的。

对于数组数组对象,使用以下示例说明原型属性的用途。向数组对象添加一个方法,该方法返回数组中最大的元素值。为此,声明一个函数,将其添加到Array.prototype中,然后使用它。

函数array_max() { var i,max=this[0];for(I=1;长度;I){ if(max this[I])max=this[I];}返回最大值;} array . prototype . max=array _ max;var x=新数组(1,2,3,4,5,6);var y=x . max();代码执行后,y将最大值保存在数组x或6中。

3 .构造函数属性

表示创建对象的函数。描述:构造函数属性是所有具有原型的对象的成员。它们包括除全局和数学对象之外的所有JScript本机对象。构造函数属性保存对构造特定对象实例的函数的引用。

例如:

x=新字符串(' Hi ');If(x.constructor==String) //进行处理(条件为真)。//或函数MyFunc{ //函数体。} y=新的MyFuncIf(y.constructor==MyFunc)//进行处理(条件为真)。对于数组:y=新数组();

数组对象方法

Sort()方法

语法arrayObject.sort(sortby) sortby可选。指定排序顺序。必须是函数。var arr=[11,2,28,4,5,1];console . log(arr . sort());//return [1,11,2,28,4,5]为什么这里的11和28没有按顺序排列?这是因为无参数排序是按照字符编码的顺序排序的。

那么,如果希望数组元素从小到大排序呢?请看下面的代码:

var arr=[11,2,28,4,5,1];console.log(arr.sort(函数(a,b)){ return a-b;//返回[1,2,4,5,11,28]});如果要按其他标准排序,则需要提供一个比较函数,该函数比较两个值,然后返回一个数字,指示两个值的相对顺序。比较函数应该有两个参数a和b,其返回值如下:如果a小于b,则在排序后的数组中a应该出现在b之前,那么将返回小于0的值。如果a等于b,则返回0。如果a大于b,则返回大于0的值。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:JavaScript每天必须学习的数组和对象是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。