JavaScriptオブジェクト引用タイプ(Pythonとの比較が多く含まれています)


JSでは、対象引用タイプは以下のように分類されています。Object、Aray、Date、RegExp、Function、およびJAVA包装機構に類似したBoolean、Number、String、また、対象Global、Mathが内蔵されています。これらの参照の種類をそれぞれ紹介します。
    1:Objectタイプ。Objectオブジェクトを作成するには、2つの方法があります。
    
var obj=new Object();
obj.name="ted";
obj.age=21;
 
   この方法はPythonの動的性質と似ています。
    第二の方法は、公式用語を対象の字面量と呼ぶ方式であり、これも公式の推奨方法であり、パッケージの味があるからである。
   
var obj={
    name:"ted",
    age:23
}
 
    このようにオブジェクトタイプを定義するときは、Objectタイプのコンストラクタ(FireFoxを除く)には呼び出されません。実際にあなたが書き換えたら:
   
var obj={};
obj.name="ted";
obj.age=23;
 
   これを書き換えるだけで、デフォルトの属性しか持ちません。
 
   2:Arayタイプ
     JSのArayタイプは、「配列」と名付けられていますが、実際にはPythonのリストタイプに近いです。Arayタイプのオブジェクトは、任意の基本タイプを置くことができます。オブジェクトは、自由に自動的に伸ばすことができます。Arayタイプのオブジェクトを作成するには、2つの方法があります。
    第一の方式は、newオペレータを採用する。
   
var array=new Array();
//              ,           
var arary=new Array(3);
var array=new Array("test","love");
//            
//                 3    
//                  2,   test love   
 
  第二の方法は、配列字面量方式と呼ばれ、Pythonのリストタイプ定義に非常に似ています。
  
var array=["test","love"]
 
 ただ、JSでは、元素の末尾にコンマをつけてはいけません。
    
var array=["test","love",]// IE  Opera       
 
Pythonにはこのような問題はなく、関数の副作用と呼ばれる特性を作成するためにも利用できます。たとえば:
 
a=(1);# 1            a
a=(1,);#         a,   1,       1
  
しかし、JSの配列は任意に伸ばすことができます。根本的な原因は、配列のlength属性がJavaまたはPythonの配列長属性とは異なり、JSでは読み取り可能ではないからです。たとえば:
  
var a=[1,2]
alert(a.length)//  2
a[2]=5
alert(a.length)//  3
 
   Pythonでは、JAVAと同じ配列の逸脱が起こるだけです。
   だからJSでは、この点を利用して簡単なことができます。例えば、
   
 var a=[1,2]
 a[a.length]=3
 a[a.length]=4
 alert(a)//  1,2,3,4
  a[100]=5
 alert(a.length)//  100,   4 98         undifined 
  
   また、配列タイプのArayは、JSにおいても、スタックとキューのタイプを同時に備えており、これはPythonのリストタイプと非常に同じである。JSでは、スタックの特性は、それぞれpush(Object...args)とpop()を呼び出すことであり、前者は任意の数のメンバーを受け入れることができ、後者は最初から最後までスタックの要素をイジェクトする。たとえば:
  
var a=[1,2];
a.push(3,4);
alert(a);//  1,2,3,4
var item=a.pop();
alert(item);//  4
 
   対応するPythonコードは:
    
a=[1,2];
a.append(3);
a.append(4);
print a;#  1,2,3,4
b=a.pop();
print b;#  4
     JSの配列に対応するキュー特性は、pushとshiftに利用され、後者はキューヘッド(配列に対応するものが最初の要素)から一つの要素を除去します。
var a=[1,2];
a.push(3,4);
alert(a);//  1,2,3,4
var item=a.shift();
alert(item);//  1
 
       Pythonに対応すると、次のようになります。
  
a=[1,2]
a.append(3);
print a;#  1,2,3
b=a.pop(0);
print b;#  1
 
     pythonでスタックとキューを実現するために使用されるのは同じ方法であることが分かりますが、pop法は異なります。popメソッドはパラメータを指定しないとデフォルトで最後の要素をイジェクトします。以下はPythonのpop方法の説明である。
    
pop(...)
L.pop([index]) -> item -- remove and return item at index (default last)
  
        JSで配列をソートする方法は、2つあります。
        第一のreverse()方法は、この方式が直接反転します。
        第二の形態sort()は、すべてのオブジェクトを文字列として扱う点に注意したいが、そうでない場合はそのtoString()を呼び出す。
       
var a=[1,5,10,15,2]
a.sort();
//  1,2,5,10,15 ? !
alert(a);//  1,10,15,2,5
 
        数値の種類で並べ替えたい場合は、比較関数を指定します。例えば、
  
function compare(num1,num2){
   return num1-num2;//    
  //return num2-num1;//    
}
var a=[1,5,10,15,2];
a.sort(compare);
alert(a);//         1,2,5,10,15 
    
      Pythonではこのような問題はありません。理由は簡単です。Pythonはすべて対象です。どのような比較をする時も、デフォルトではそれらの内蔵関数を呼び出します。cmp_()Pythonの基本的なタイプはよく実現されていますので、ここでは普通のプログラム開発員が心配する必要はありません。
   
      同じJSの配列もシーケンスカットをサポートしています。実現方法はslice方法で、デフォルトでは第0項から最後の要素まで全ての配列要素を返します。負の値を指定することもできます。注意すべきのは-1だけです。最後の要素から計算します。最初の要素は-レングス-1と呼ばれます。例えば、
     
var a=[1,5,10,15,2];
alert(a.slice(1,4));//  5,10,15
alert(a.slice(-3,-2));//  10
 
   Pythonでは、より徹底的に支持され、より簡便です。Pythonには、コロンという記号が提供されています。上記の方法は、以下のように簡略化することができる。
   
a=[1,5,10,15,2]
print a[1:4];#  5,10,15
print a[-3:-2];#  10
#       ,             ,        
 
   ここに書いてください。もっと早いJAVA言語を考えてみてもいいです。JAVAの中の配列は改造版のCスタイルの配列にすぎないことが分かります。これは対象に向かうべき関数の特性に欠けています。