宝哥软件园

常见JavaScript函数的综合集合

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

本文主要总结了JavaScript的常用功能,比如一些常用的JS对象、基本数据结构、功能函数,以及一些常用的设计模式。

目录:

众所周知,JavaScript是一种动态的面向对象编程语言,可以达到以下效果:

丰富网页,丰富Web界面,实现本地或远程存储。实现分布式网络应用的前端组件,并在后台管理数据存储。使用JavaScript可以实现一个完整的分布式Web应用程序。1.JavaScript中的数据类型。

JavaScript提供了三种元数据类型,字符串、数字和布尔值。typeof(v)===' number '可用于测试变量v的类型。

提供五种基本引用类型:对象、数组、函数、日期和正则表达式。数组、函数、日期和正则表达式是特殊类型,但严格来说,日期和正则表达式是元数据类型,可以封装在其他对象中。

JS中的变量类型、数组元素类型、函数参数、返回值不需要声明,类型之间的转换是自动进行的。

变量值可以是:

1.数值:如字符串、数字或布尔值。2.对象引用:可以引用一个典型的对象,也可以是数据、函数、日期或正则表达式。3.特殊数据值Null是初始化对象的典型默认值。4.未定义的特殊数据,通常用于已定义但未赋值的变量。字符串是一系列Unicode字符串,如“Hello World”、“A3FO”或空字符串“”。字符串连接可以由运算符执行,或者可以使用=符号来验证两个字符串是否相等。

If(名姓=='詹姆斯邦德').Numeric表示64位浮点数,在JS中整形和浮点数没有明显的区别。如果表达式的值不等于某个数字,可以将其值设置为NaN,表示非数字,可以与isNaN结合使用。下表是详细的类型测试和转换。

变量的作用域目前,JavaScript和ES5提供了两种类型的作用域:全局变量和函数作用域,但是没有块作用域。区块范围的范围不明确,应避免使用区块范围。下面的代码虽然是开发人员常用的模式,但却是一个陷阱。

函数foo(){ for(var I=0;i 10I) {.//用i }做点什么}所有变量声明都应该在函数的开头。JS和ES6支持块范围,使用关键字let定义变量。

严格模式从ES5开始。严格模式用于在运行时检测错误。在严格模式下,必须声明所有变量。如果给未声明的变量赋值,将引发异常。

在JavaScript文件或脚本元素中,通过输入以下代码切换到严格模式:

使用严格;除非项目所依赖的库与严格模式不兼容,否则建议使用严格模式。

JS中对象的概念不同于OO或UML中的概念,尤其是JS中,对象不需要实例化,也可以有自己的方法,不仅包括属性槽,还包括方法槽。此外,它还包含键值槽;因此,它们总共有三种插槽,而常见的对象只是属性插槽。

JS对象是一个由一系列名称-值组成的槽。名称可以是属性名、函数名和映射名。可以使用JSON (JSON对象声明语法)以特定的方式创建对象,而无需实例化一个类。代码如下:

var person 1={ last name : ' Smith ',first name : ' Tom ' };var o1=Object.create(空);//没有插槽的空对象如果插槽的名称是合法的JS标识符,则插槽可以表示属性、方法或键值对。如果名称包含一些特殊字符,例如空格,Slot表示一个键值对,它是一个映射元素,如下所示:

属性槽中的名称:

1.dataValue属性,在本例中,该值表示变量值或值表达式。

2.对象值属性,其中值表示对象的引用或表达式。

方法槽代表JS函数,其值为JS函数定义表达式:

有两种方法可以访问对象属性:

1.使用“.”(类似于c和Java):

Person1.lastName='Smith'2。使用地图:

Person1['lastName']='Smith'JS对象可以有多种使用方式。以下是五种常见情况:

1.该记录是一个属性槽集合,例如:

var my record={ first name : ' Tom ',lastname3360' Smith ',age:26} 2。哈希映射、数组、哈希表等映射;

Varnumeral2数字={ '一' :' 1 ','二' :' 2 ','三' :' 3'} 3。无类型对象不需要实例化一个类,它可能包含属性槽和函数槽3360。

var person 1={ last name : ' Smith ',firstName: 'Tom ',getfullname : function(){ return this . first name ' ' this . last name;} };数组列表数组是一种逻辑数据结构,通过数组下标来访问。如数组初始化:

var a=[1,2,3];JS数组可以动态增长,因此数组索引可能比实际的元素数量多,如下所示:

a[4]=7;数组循环:

for(I=0;一.长度;I){ 0.}

数组是一种特殊的对象类型,所以在很多情况下,需要判断一个变量是否属于数组类型,并使用IsArray方法:Array.isArray(a)。

向数组中添加新元素:

a . push(NewElement);删除:a .拼接(I,1);查找:if (a.indexOf(v) -1).循环:

var I=0;for(I=0;一.长度;I){ console . log(a[I]);}如果数组很小,可以使用foreach循环:

a . foreach(function(elem){ console . log(elem);}) JS还提供了克隆数组的功能:

var clone=a . slice(0);Iii .Mapsmap提供了从键到值的映射。JS映射是一串字符集,可以包含空格:

Var我的翻译={ '我的房子' :' meinhaus ','我的船' :' meinboot ','我的马' :' meinperfard'}增加:我的翻译['我的车']=' mein auto ';删除:my translation[' my car ']=' mein auto ';查找:if(my translation中的“我的自行车”).循环:var i=0,key=' ',key=[];键=对象键(m);for(I=0;长度;I){ key=keys[I];console . log(m[key]);}如果地图很小,可以使用foreach语句:object.keys (m)。foreach(function(key){ console . log(m[key]);})copy mapvarclone=JSON . parse(JSON . stringfy(m))总结:JavaScript支持四种基本的数据结构。1:ArrayList:如['一','二','三'],特殊JS对象。

2:记录:特殊的JS对象,如{firstname:' Tom ',lastname 3360 ' Smith ' };

3:地图:如{ '一' :1,'二' :2,'三' :3}

4:实体表:如下表所示,是一个特殊的映射,它的值是一个固定ID的记录。

在实际应用中,记录、地图和实体之间没有明显的区别,只有概念上的区别。对于JS引擎来说,它们都是对象。但概念上有差异。

四.函数如表1所示,函数是特殊的JS对象,名称属性和长度属性表示参数的个数。如下,判断v是否指向函数:

if(v的类型)==' function '){ 0.}功能定义:

var my function=function Nameoffunction(){ 0.}名称功能是可选的。如果省略函数名,则该函数被称为匿名函数。通常,函数是通过变量调用的,例如上面的代码,这意味着。

myFunction调用myFunction()函数,而不是使用NAmMefmyFunction()。

匿名函数表达式在其他编程语言中称为lambda表达式。下面的代码是一个匿名函数。它可以与预定义的排序函数进行比较:

var list=[[1,2],[1,3],[1,1],[2,1]];list.sort(函数(x,y){ return((x[0]==y[0])?x[1]-y[1]: x[0]-y[0]);});函数声明:

函数natimeofffunction(){ 0.}和代码。

Var Thenameoffunction=函数Nameoffunction(){ 0.}是等效的;

函数nameoffunction被声明,函数由nameoffunction变量引用。

JS提供函数内联,闭包机制允许JS函数调用函数以外的使用变量。该函数可以创建一个闭包来存储当前环境。如下所示,不需要通过参数将外部变量的结果传递给内部函数,但是它本身是可用的。

var sum=函数(数字){ var result=0;numbers.forEach(函数(n){ result=n;});返回结果;};console.log(sum([1,2,3,4]);执行方法时,可以使用内置的参数对象来访问函数中的参数。arguments对象类似于使用方法的数组,具有长度属性和索引,并且可以使用For语句进行循环和迭代。但是,因为它不是Array实例,所以JS arrary的某些方法不能应用于foreach。

arguments对象中的元素数量与函数参数的数量相同。您也可以在不指定参数数量的情况下定义方法。调用时,可以为函数分配多个参数,例如:

var sum=function () { var result=0,I=0;for(I=0;一、论点.长度;i ) { result=结果参数[I];}返回结果;};console.log(sum(0,1,1,2,3,5,8));//20方法是在构造函数的原型上定义的,可以由对象创建的构造函数调用,如array . prototype . foreach;数组表示构造函数,调用类的实例作为上下文对象引用,如下所示:numbers表示foreach中的上下文对象:

var numbers=[1,2,3];//创建Arraynumbers.forEach的实例(函数(n){ console . log(n));});不管原型方法是否被上下文对象调用,只要参数是对象,就可以用JS函数的调用方法辅助调用对象。我们可以使用foreach循环方法,如下所示:

var sum=function(){ var result=0;Array.prototype.forEach.call(参数,函数(n){ result=result n;});返回结果;};Function.prototype.call方法和apply都存在,用于在函数运行时更改上下文。

动词(verb的缩写)定义和使用类类是面向对象的基本概念,对象的实例化称为类。JS中定义的类需要满足以下五个要求:

1.指定类的名称、实例级的属性和方法以及类级的属性和方法。

2.可预测的强度,可用于验证它是否是对象的实例。

3.实例级属性用于检测对象的直接类型。

4.属性继承。

5.方法继承。

此外,它还支持正确的集成和多分类。

JS中没有统一的类定义标准,因此可以使用不同的代码模式来定义类,并应用于各种框架。在JS中定义类最常用的方法如下:

1.构造函数规范,可以通过原型链实现方法继承,支持创建新的类实例。

2.工厂对象,用于预定义对象。创建方法创建新实例。该方法中基于构造函数的继承机制可以被其他机制替代。

您需要使用类来创建应用程序,因此您通常需要定义类之间的关系,因此您必须确保使用相同的类。

6.基于构造函数的类只有ES6引入了基于构造函数的类的定义。新语法支持定义一些简单的类继承。具体步骤如下:

步骤1 .基类Person有两个属性,名字和姓氏,实例层的方法toString和静态方法checkLastName;

类Person {构造函数(第一个,最后一个){ this.firstName=firstthis.lastName=last} toString() {返回this . first name ' ' this . last name;}静态checkLastName(ln) { if (typeof(ln)!==' string ' | | ln . trim()==' '){ console . log(' error : ' '无效姓氏!');}}}步骤1。b类级别的属性定义:

person . instance={ };在第二步中,将定义一个具有其他属性和方法的子类,也可以覆盖父类的相关方法:

class Student扩展Person { constructor(第一个,最后一个,studNo) { super.constructor(第一个,最后一个);this.studNo=studNo} //方法重写超类方法toString(){ return super . toString()'(' this . studno ')';}}ES5,可以定义从构造函数类继承的子类。如下所示:

步骤1.a首先定义一个构造函数,它可以隐式定义一个类的属性并赋值;

函数Person(first,last){ this . first name=first;this.lastName=last}请注意,上面代码中的这个引用了新生成的对象,该对象在调用构造函数时已经生成。

步骤1.b定义实例层的方法:

人。原型。tostring=function(){返回这个。名字叫“这个”。姓氏;}步骤1.c定义静态方法:

人。checklastname=function(ln){ if(类型为(ln)!==' string ' | | ln。trim()==' '){控制台。日志('错误:无效姓氏!');} }步骤1.d定义类层次的静态属性

人。实例={ };步骤2.a定义子类:1:函数学生(第一个,最后一个,studNo) {2: //调用超类建造师3:人。呼叫(这个、第一个、最后一个);4: //定义和分配附加属性this.studNo=studNo6: }通过调用超类的构造函数人称(这个,),来创建新对象。其中这指的是学生,财产槽在超类的构造函数中已经创建((名字和姓氏)以及其他子类相关的属性。在这种情况下可使用财产继承机制保证所有的属性已经被定义且被创建。

步骤2b,通过构造函数的原型属性安装方法继承。如下,分配了一个新对象创建子类型构造函数的原型属性,并做出适当的调整:

//学生继承自学生。原型=对象。创造(人。原型);//调整子类型的构造函数学生属性。原型。构造函数=学生;步骤2c,重新定义子类方法重写超类方法:

学生。原型。tostring=function(){ return person。原型。tostring。把这个叫做。studno ')';};基于构造器类的实例化是通过应用新的操作符来创建的,并提供合适的构造参数:

var pers1=新人(“汤姆”、“史密斯”);方法toString通过个人1 .来调用:

警报('此人的全名是:英尺个人1。tostring());在射流研究…中原型是具有方法槽的对象,可以通过射流研究…方法或属性槽继承的。

七、基于工厂的类在该方法中定义了射流研究…对象人,含有特殊的创造方法来调用预定义的对象。创造方法,创建人类型的对象;

var Person={ name: 'Person ',属性: { First name : { range : ' NonEmptyString ',label:'First name ',writable: true,enumerable: true},姓氏: { range 3: ' NonEmptyString ',label:'Last name ',可写3: true },methods : } },create:函数(槽){//创建对象var obj=object。创建(这个。方法,这个。属性);//为Object.defineProperty的*直接型*添加特殊属性(obj,' type ',{value: this,writable: false,可枚举: true });//初始化对象对象。键(槽)。forEach(函数(prop){ if(prop in this。属性)obj[prop]=插槽[prop];})返回obj } }注意射流研究…对象人实际表示的是基于工厂的类工厂化类的实例化是通过调用它自己的创造方法实现的:

var pers1=人。create({名字: ' Tom ',姓氏: ' Smith ' });getFullName方法是通过个人1 .调用的,如下:

警报('此人的全名是:英尺个人1。getfullname());每个属性的声明都是使用对象。创造声明的,其中包含三个参数及值、“描述符”可写:真和枚举:真如上面第五行的。

是不是一篇很赞的文章,果断收藏吧!

更多资讯
游戏推荐
更多+