ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 参照型の説明
object
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タイプ
//定义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
detectアレイ:typeof操作オペレーターを使用して(未定義、null、null、boolean、number、string)determine値がどの参照型であるかを判断するには、instanceof 演算子を使用します。 Array.isArray() メソッドが Array に追加される理由は、グローバル実行環境が 1 つしかない場合に、instanceof 演算子が使用されるためです。複数のフレームワークが含まれる場合、2 つ以上の異なるグローバル環境が存在することになります。配列コンストラクターの 3 つ以上の異なるバージョン。 スタックメソッド (LIFO)
: 配列は、プッシュ (任意の数のパラメータを受け取り、それらを配列の末尾に 1 つずつ追加します) とポップ (配列の末尾から最後の項目を削除し、長さの値を減らします) を使用します。 、削除された項目を返します)。メソッドはスタックのような動作を実現できます。
キューメソッド (FIFO): 配列は、シフト (配列の先頭から項目を取得) およびプッシュまたはシフト解除 (配列の先頭に項目を追加し、新しい配列の長さを返す) を通じてキューをシミュレートできます。 )そしてポップなフォルム。
リゾートメソッド: reverse (配列項目の順序を逆にする); sort (ソートを実装、カスタム関数を受け取り、負の数、0、正の数を渡す)
操作メソッド: concat( Add受け取ったパラメータに基づいて配列にコピーし、配列のコピーを返します);
splice() メソッド: 開始位置と終了位置の間の項目を返します。任意の数を削除 項目 splice(0,2) は、最初の 2 つの項目 (削除される最初の項目の位置と削除される項目の数) を削除します。指定された位置には複数の項目を挿入できます。指定した位置にアイテムを挿入したり、任意の数のアイテムを同時に削除したりできます。 位置メソッド
: ECMAScript 5 では、配列インスタンス用の 2 つの位置メソッド、indexOf() と lastIndexOf() が追加されました
反復メソッド :
every(): 関数を受け取る if は true を返します配列内の各項目の結果は true を返します。
Mergeメソッド
関数型関数は実際には Function 型のインスタンスであり、他の参照型と同じプロパティとメソッドを持ちます。したがって、関数名は実際には関数オブジェクトへのポインターです。
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 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"));
関数の内部プロパティ:
関数の内部には、引数と戻り値の 2 つの特別なオブジェクトがあります。これ。引数の主な目的は、関数パラメータを保存することです。関数パラメータには、引数オブジェクトを所有する関数へのポインタである callee 属性があります。
//简单的递归算法,但是函数内部的执行和函数名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); } }
関数オブジェクトのもう 1 つの属性は、caller です。現在の関数を呼び出した関数への参照を保持します。つまり、誰が関数を呼び出しても、呼び出し元はその参照を保存します。
りー
函数属性和方法:
每个函数都包含两个属性: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时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值,读取模式访问字符串时,后台都会自动完成下列处理:
创建String类型的一个实例。
在实例上调用指定的方法。
销毁这个实例。
引用类型与基本包装类型的主要区别就是对象的生存期。使用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 中国語 Web サイトの他の関連記事を参照してください。