>웹 프론트엔드 >JS 튜토리얼 >JavaScript 참조 유형에 대한 설명

JavaScript 참조 유형에 대한 설명

巴扎黑
巴扎黑원래의
2017-07-23 15:50:491508검색

객체 유형

 1 //创建方式一 2 var person = new Object(); 3 person.name = "jack"; 4 person.age = 12; 5  6 //创建方式二 7 var person = { 8       name:"jack", 9       age:1210 }11 //创建空对象12 var person = {};//与new Object()相同13 14 //访问方式15 person["name"];  jack16 person.name;  jack17 //以上两种方式区别在于使用中括号方式可以通过变量访问18 var propertyName="name";19 person[propertyName];  jack20 person["first name"] = "jack";//如果属性名有空格

Array type 

//定义var array = new Array();var array2 = new Array("a","b","c");var array3 = ["a","b","c"];//修改array3[2] = "d";//array3:a,b,d//新增array3[3] = "d";//array3:a,b,c,darray3[length] = "d";//array3:a,b,c,d第二种新增方式//末尾删除元素//数组的length属性不是只读的,所以通过改变length可以从数组末尾移除array3.length=3;//array3:a,b,c

배열 감지:

typeof를 사용하여 값이 어떤 기본 유형(정의되지 않음, Null, 부울, 숫자, 문자열)인지 확인 작동 연산자를 사용하여 값이 어떤 참조 유형을 사용하는지 확인합니다.

Array에 Array.isArray() 메소드를 추가한 이유는 전역 실행 환경이 하나뿐인 경우에는 instanceof 연산자를 사용하기 때문입니다. 두 가지 이상의 서로 다른 버전의 Array 생성자. 스택 방법(LIFO): 배열은 푸시(임의의 매개변수를 수신하여 하나씩 배열 끝에 추가)와 팝(배열 끝에서 마지막 항목을 제거하고 길이 값을 줄임)을 사용합니다. , 제거된 항목을 반환) 메서드는 스택과 같은 동작을 달성할 수 있습니다.

큐 메서드(FIFO): 배열은 시프트(배열 앞쪽에서 항목 가져오기) 및 푸시 또는 시프트 해제(어레이 앞쪽에 항목을 추가하고 새 배열의 길이를 반환)를 통해 대기열을 시뮬레이션할 수 있습니다. ) 및 팝.

Resort method: reverse(배열 항목의 순서를 반대로 함); sort(정렬 구현, 사용자 정의 함수 수신, 음수, 0, 양수 전달)

작업 방법: concat( 추가 수신된 매개변수를 기반으로 배열을 복사하고 배열의 복사본을 반환합니다.) 슬라이스(시작 위치와 끝 위치 사이의 항목을 반환하지만 끝 위치의 항목은 포함하지 않음)

   splice() 메서드: 숫자 삭제 항목 splice(0,2)는 처음 두 항목(삭제할 첫 번째 항목의 위치 및 삭제할 항목 수)을 삭제합니다. 여러 항목을 지정된 위치에 삽입할 수 있습니다. 항목은 지정된 위치에 삽입될 수 있으며 항목 수에 관계없이 동시에 항목 수를 삭제할 수 있습니다.

위치 메서드 : ECMAScript 5에는 배열 인스턴스에 대한 두 가지 위치 메서드인 indexOf() 및 lastIndexOf()가 추가되었습니다.

반복 메서드 :

  1. every(): True인 경우 함수를 받습니다. 배열의 각 항목에 대해 결과가 true를 반환합니다.

  2. some(): 함수를 받습니다. 배열에 true를 반환하는 항목이 있으면 결과는 모든 것과 다릅니다.

  3. filter(): 함수를 받아 조건을 만족하는 항목을 반환하는데, 이는 true입니다.

  4. forEach(): 배열의 각 항목에 대해 지정된 함수를 실행합니다.

  5. map(): 주어진 함수를 실행하고 각 함수 호출의 결과로 구성된 배열을 반환합니다.

병합 방법: 축소(배열의 첫 번째 항목부터 시작) 및 ReduceRight(배열의 마지막 항목부터 시작).

함수 유형

함수는 실제로 객체입니다. 각 함수는 함수 유형의 인스턴스이며 다른 참조 유형과 동일한 속성 및 메서드를 갖습니다. 따라서 함수 이름은 실제로 함수 개체에 대한 포인터입니다.

 1 //使用函数声明语法定义 2 function sum(num1,num2) 3 { 4      return num1+num2;          
 5 } 6 //使用函数表达式定义,注意结尾要加分号 7 var sum = function(num1,num2) 8 { 9     return num1+num2;10 };

함수 선언과 함수 표현식에는 차이가 있습니다. 데이터를 실행 환경에 로드할 때 파서는 먼저 함수 선언을 읽고 코드를 실행하기 전에 액세스할 수 있도록 만듭니다. 실제로는 그렇지 않습니다. 파서가 위치한 코드 줄까지 파서가 실행될 때까지 해석되고 실행됩니다. 즉, 함수를 호출하는 코드 앞에 함수 표현식을 작성해야 합니다.

Function은 다음 예와 같이 매개변수 또는 반환 값으로 값으로 사용될 수 있습니다.

//根据属性名来创建一个比较函数,来指明按照哪个属性来排序function createComparisonFunction(propertyName)
{return function(object1,object2)
     {         var value1 = object1[propertyName];         var value2 = object2[propertyName];         
         if(value1<value2){             return -1;
         }else if(value1<value2){             return 1;
         }else{ 
             return 0;
         }
     }
}    
//利用数组data调用sort()方法data.sort(createComparisonFunction("name"));

Function 내부 속성:

함수 내부에는 인수와 반환 값이라는 두 가지 특수 개체가 있습니다. 이것. 인수의 주요 목적은 함수 매개변수를 저장하는 것입니다. 여기에는 인수 개체를 소유한 함수에 대한 포인터인 호출 수신자 특성이 있습니다.

//简单的递归算法,但是函数内部的执行和函数名factorial耦合在一起function factorial(num)
{if(num<=1)
    {return 1;
    }else{return num*factorial(num-1);
    }
}//利用arguments.callee解决function factorial(num)
{if(num<-1){return 1;
    }else{return num*arguments.callee(num-1);
    }
}

함수 객체의 또 다른 속성은 caller입니다. 현재 함수를 호출한 함수에 대한 참조를 보유합니다. 즉, 누가 함수를 호출하든 호출자는 해당 참조를 저장합니다.

rreee

函数属性和方法:

每个函数都包含两个属性:length(函数接收的命名参数的个数)和prototype。

每个函数都包含两个非继承而来的方法:apply()和call(),在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。apply()接收两个参数,一个在其中运行函数的作用域,拎一个是参数数组(可以是array或arguments对象)。call()第一个参数和apply一样,后面必须明确传入每个参数。除了用法不同其他的没什么不同。另外他们真正强大的地方是能够扩充函数赖以运行的作用域。

function sum(num1,num2)
{     return num1+num2;  
}
sum.apply(this, [num1,num2] );
sum.call(this,num1, num2);//扩充函数作用域window.color = "red";var o = {color:"blue"};function showColor(){
    alert(this.color);
}

showColor();//redshowColor.call(this);//redshowColor.call(window);//redshowColor.call(o);//blue

也可以使用bind()方法。

 

基本包装类型


为了便于操作基本类型值,ECMAScript引入3个特殊的引用类型:Boolean,Number,String。所谓包装类型,就是将基本类型包装起来,放一些操作方法和属性等。

每当读取一个基本类型值的时候,后台就会创建与一个对应的基本包装类型的对象,从而能让我们可以调用某些方法操作这些数据。

var s1 = "some text";var s2 = s1.substring(2);//后台内部相当于如下代码var s1 = new String("some text");var s2 = s1.substring(2);
s1 = null;

当第二行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值,读取模式访问字符串时,后台都会自动完成下列处理:

  1. 创建String类型的一个实例。

  2. 在实例上调用指定的方法。

  3. 销毁这个实例。

引用类型与基本包装类型的主要区别就是对象的生存期。使用new 操作符在执行流离开当前作用域之前一直保存在内存中。而自动创建的基本包装类型的对象,则只存在一行代码的执行瞬间,然后立即销毁。

单体内置对象

内置对象:

由ECMAScript实现提供的,不依赖于宿主环境的对象,程序执行之前就已经存在,比如:Object,Array和String。另外还有Global和Math。

Global对象:

  • URI编码方法:通过encodeURI()和encodeURICOMponent()方法对URI进行编码,以便发送给浏览器。区别在于第一个不会对本身属于URI的特殊字符进行编码,例如冒号,正斜杠,问号和井号。而另一个则会对它发现的任何非标准字符进行编码。与这两个方法对应的是:decodeURI(只能对使用encodeURI()替换的字符进行解码)和decodeURIComponent(针对encodeURIComponent()编码的字符)。

  • eval()方法像是一个解析器。比如eval("function say(){  alert(' Hi '); }");但是创建的任何变量或者函数都不会被提升,只有在eval执行时候才创建。

  • window对象,全局作用域中声明的所有变量和函数,都成为了window对象的属性。

 

위 내용은 JavaScript 참조 유형에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.