一.クイックスタート

12413 ワード

廖雪峰js教程検査漏れ補充
一.基本タイプと変数
1.等しい演算子に注意
1つ目は==比較で、データ型を自動的に変換して比較し、多くの場合、非常に奇妙な結果を得ることができます.2つ目は==比較です.データ型が一致しない場合はfalseを返し、一致している場合は比較します.JavaScriptというデザインの欠陥のため、==比較を使わず、常に==比較を続けます.
2.NaNという特殊なNumberは他のすべての値と等しくありません.それ自体も含まれています.
NaN === NaN; //false

NaNを判断できる唯一の方法はisNaN()関数によって
isNaN(NaN); //true

3.注意浮動小数点数の等しい比較
1 / 3 === (1 - 2 / 3); // false

これはJavaScriptの設計上の欠陥ではありません.浮動小数点数は、コンピュータが無限サイクル小数を正確に表すことができないため、演算中に誤差が発生します.2つの浮動小数点数が等しいかどうかを比較するには、その差の絶対値のみを計算し、しきい値より小さいかどうかを確認します.
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

4.nullとundefined
nullは「空」の値を表し、0および空の文字列「とは異なり、0は数値であり、「長さ0の文字列」を表し、nullは「空」を表す.
JavaScriptの設計者はnullで空の値を表すことを望んでいるが、undefinedは値を定義していない.事実は、これは卵用ではなく、両者を区別する意味は大きくないことを証明している.ほとんどの場合nullを使うべきです.undefinedは,関数パラメータが伝達されるか否かを判断する場合にのみ有用である.
5.対象
JavaScriptのオブジェクトは、キー値からなる無秩序なセットです.たとえば、次のようになります.
var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

JavaScriptオブジェクトのキーはすべて文字列タイプであり、値は任意のデータ型であってもよい.上記personオブジェクトは、6つのキー値ペアを定義し、各キーはオブジェクトのプロパティとも呼ばれます.たとえば、personのnameプロパティは「Bob」、zipcodeプロパティはnullです.
オブジェクトのプロパティを取得するには、オブジェクト変数を使用します.属性名の方法:
person.name; // 'Bob'
person.zipcode; // null


6.変数
JavaScriptでは、等号=を使用して変数を割り当てます.任意のデータ型を変数に割り当てることができ、同じ変数を繰り返し割り当てることができ、異なるタイプの変数であってもよいが、varで1回しか説明できないことに注意してください.たとえば、次のようにします.
var a = 123; // a     123
a = 'ABC'; // a     

付与文の等号を数学の等号に等しくしないでください.たとえば、次のコードがあります.
var x = 10;
x = x + 2;

x=x+2を数学的に理解するとどうしても成り立たないので,プログラムでは,付与文はまず右側の式x+2を計算し,結果12を得て変数xに付与する.xの前の値は10であるため,再付与後,xの値は12となる.
JavaScriptは設計当初,初心者の学習を容易にするためにvarで変数を明示することを強制しなかった.この設計エラーは、varによって宣言されずに使用される変数が、グローバル変数として自動的に宣言されるという深刻な結果をもたらします.
i = 10; // i       

二.文字列
1.操作文字列
文字列の一般的な操作は次のとおりです.
var s = 'Hello, world!';
s.length; // 13

文字列の指定された位置の文字を取得するには、Arrayのような下付き文字を使用します.インデックス番号は0から始まります.
var s = 'Hello, world!';

s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined            ,     undefined

特に、文字列は可変ではありません.文字列のインデックスに値を割り当てると、エラーは発生しませんが、効果はありません.
var s = 'Test';
s[0] = 'X';
alert(s); // s   'Test'


2.JavaScriptは文字列にいくつかの一般的な方法を提供しています.これらの方法を呼び出すこと自体は、元の文字列の内容を変えるのではなく、新しい文字列を返すことに注意してください.
toUpperCase
toUpperCase()は、文字列をすべて大文字に変更します.
var s = 'Hello';
s.toUpperCase(); //  'HELLO'

toLowerCase
toLowerCase()文字列をすべて小文字にする
var s = 'Hello';
var lower = s.toLowerCase();

indexOf()
indexOf()は、指定した文字列が表示される場所を検索します.
var s = 'hello, world';
s.indexOf('world'); //   7
s.indexOf('World'); //          ,  -1

substring
substring()は、指定したインデックス区間のサブ列を返します.
var s = 'hello, world'
s.substring(0, 5); //    0   5(   5),  'hello'
s.substring(7); //    7     ,  'world'

三.配列(Arrayは任意のデータ型を含み、インデックスによって各要素にアクセスできます)
1.lengthの注意点
Arrayの長さを取得するには、lengthプロパティに直接アクセスします.
var arr = [1,2,3,4,'hrllo',null,true];
arr.length; //6

Arrayのlengthに直接新しい値を割り当てると、Arrayサイズが変化することに注意してください.
var arr = [1,2,3];
arr.length; //3
arr.length = 6;
arr; //arr    [1,2,3,undefine,undefine,undefine]
arr.length = 2;
arr; //arr    [1,2]

Arrayは、インデックスによって対応する要素を新しい値に変更することができるので、Arrayのインデックスに値を割り当てると、このArrayが直接変更されます.
var arr = ['a','b','c'];
arr[1] = 99;
arr; //arr     ['a',99,'c']

インデックスで値を割り当てると、インデックスが範囲を超えている場合、同様にArrayサイズが変化することに注意してください.
var arr = [1,2,3];
arr[5] = 'x';
arr; //arr  [1,2,3,undefine,undefine,'x']

他のプログラミング言語の多くでは、配列のサイズを直接変更することは許されず、境界を越えたアクセスインデックスがエラーを報告します.しかし、JavaScriptのArrayには何の間違いもありません.コードを作成するときは、Arrayのサイズを直接変更することはお勧めしません.インデックスにアクセスするときは、インデックスが境界を越えないことを確認します.
2.関連方法
indexOf
Stringと同様に、ArrayはindexOf()で指定した要素の場所を検索することもできます.
var arr = [10,20,'30','xuz'];
arr.indexOf(10); //  10     0
arr.indexOf(20); //  20     1
arr.indexOf(30); //  30    ,  -1
arr.indexOf('30'); //  '30'     2

なお、数字30と文字列'30'は異なる要素である.
slice()
slice()はStringに対応するsubstringバージョンで、Arrayの要素の一部を切り取り、新しいArrayを返します.
var arr = ['a','b','c','d','e','f','g'];
arr.slice(0,3); //   0  ,   3  ,      3: ['a','b','c']
arr.slice(3); //   3     : ['d','e','f','g']

slice()にパラメータを渡さないと、すべての要素が最初から最後まで切り取られます.これにより、Arrayを簡単にコピーできます.
var arr = ['a','b','c'];
var aCopy = arr.slice();
aCopy; //['a','b','c']
aCopy === arr; //false

push()とpop()
Push()はArrayの末尾にいくつかの要素を追加し,pop()はArrayの最後の要素を削除する.
var arr = [1,2];
arr.push('a','b'); //  Arrary    :4
arr; //[1,2,'a','b']
arr.pop(); //pop()  'b'
arr; //[1,2,'a']
arr.pop(); arr.pop(); arr.pop(); //  pop3 
arr; // []
arr.pop(); //     pop    ,    undefined
arr; //[]

义齿
Arrayのヘッダにいくつかの要素を追加する場合は、unshift()メソッドを使用し、shift()メソッドを使用すると、Arrayの最初の要素が削除されます.
var arr = [1, 2];
arr.unshift('A', 'B'); //   Array    : 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); //   shift 3 
arr; // []
arr.shift(); //      shift    ,    undefined
arr; // []

sort()
sort()は、現在のArrayをソートできます.現在のArrayの要素の位置を直接変更し、直接呼び出すとデフォルトの順序でソートされます.
var arr = ['c','b','a'];
arr.sort();
arr; // ['a','b','c']

reverse
reverse()Array全体の要素を変換します.つまり、反転します.
var arr = ['a','b','c'];
arr.reverse();
arr; //['c','b','a']

splice()
splice()メソッドは、指定したインデックスから複数の要素を削除し、その場所から複数の要素を追加することができるArrayを修正する万能メソッドです.
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
//    2    3   ,         :
arr.splice(2, 3, 'Google', 'Facebook'); //         ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
//    ,   :
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
//    ,   :
arr.splice(2, 0, 'Google', 'Facebook'); //   [],          
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat()
concat()メソッドは、現在のArrayと別のArrayを接続し、新しいArrayを返します.
var arr = ['a','b','c'];
var added = arr.concat([1,2,3]);
added; //['a','b','c',1,2,3]
arr; //['a','b','c']

注意する.concat()メソッドは、現在のArrayを変更するのではなく、新しいArrayを返します.実際、concat()メソッドは任意の要素とArrayを受信し、自動的にArrayを分解し、すべて新しいArrayに追加することができます.
var arr = ['a','b','c'];
arr.concat(1,2,[3,4]); //['a','b','c',1,2,3,4]

join()
join()メソッドは、現在のArrayの各要素を指定した文字列で接続し、接続後の文字列を返します.
var arr = ['a','b','c',1,2,3];
arr.join('-'); //'a-b-c-1-2-3'

Arrayの要素が文字列でない場合は、自動的に文字列に変換されてから接続されます.
たじゅうはいれつ
配列の要素がArrayである場合、次のような多次元配列を作成できます.
var arr = [[1,2,3],[400,500,600],'-'];


上記Arrayは、先頭の2つの要素自体もArrayである3つの要素を含む.
四.オブジェクト
JavaScriptのオブジェクトは、複数のキー値ペアからなる無秩序集合データ型です.JavaScriptのオブジェクトは、現実世界のオブジェクトを記述するために使用されます.例えば、「明ちゃん」といういたずらっ子を説明するために、いくつかのキー値ペアで彼を説明することができます.
var xiaoming ={
    name: '  ',
    birth: 1999,
    school: 'no.1 middle scholl',
    height: 1.70,
    weight: 65,
    score: null
};

JavaScriptは1つのオブジェクトを表し、キー値ペアはxxx:xxxの形式で明記され、用いられ、隔てられている.最後のキー値ペアは最後に追加する必要はありません.追加すると、低バージョンieなどのブラウザでエラーが表示されます.
上記のオブジェクトは、「小明」、birth属性、1999値、および他のいくつかの属性のname属性を明らかにした.最後に、このオブジェクトを変数xiaomingに割り当てると、変数xiaomingで明ちゃんのプロパティを取得できます.
xiaoming.name; //'  '
xiaoming.birth; //1999

アクセスはパスです.オペレータは完了しますが、プロパティ名は有効な変数名でなければなりません.属性名に特殊な文字が含まれている場合は、「」で囲む必要があります.
var xiaoming ={
    name: '  ',
    'middle-school' : 'no.1 middle school'
};

xiaohongのプロパティ名middle-schoolは有効な変数ではなく、「括る」必要があります.この属性にアクセスしても使用できません.オペレータは、['xxx']でアクセスする必要があります.
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '  '
xiaohong.name; // '  '

xiaohongのname属性にxiaohong['name']でアクセスすることもできますがxiaohong.nameの書き方はもっと簡潔です.JavaScriptコードを作成するとき、属性名はできるだけ標準的な変数名を使用し、objectを直接通過することができます.propの形式で属性にアクセスしました.
実際にJavaScriptオブジェクトのすべての属性は文字列ですが、属性に対応する値は任意のデータ型でも構いません.
存在しない属性にアクセスすると何が返されますか?JavaScriptでは、アクセスが存在しない属性はエラーを報告せず、undefinedを返すことを規定しています.
var xiaoming = {
    name: '  '
};
xiaoming.age; // undefined

JavaScriptのオブジェクトはダイナミックタイプなので、オブジェクトに属性を追加または削除できます.
var xiaoming = {
    name: '  '
};
xiaoming.age; // undefined
xiaoming.age = 18; //     age  
xiaoming.age; // 18
delete xiaoming.age; //   age  
xiaoming.age; // undefined
delete xiaoming['name']; //   name  
xiaoming.name; // undefined
delete xiaoming.school; //         school       

xiaomingがプロパティを持っているかどうかを検出するには、inオペレータを使用します.
var xiaoming = {
    name: '  ',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

ただし、inが属性が存在すると判断した場合、この属性は必ずしもxiaomingではなく、xiaomingが継承した可能性があります.
'toString' in xiaoming; // true

TOStringはobjectオブジェクトに定義され、すべてのオブジェクトが最終的にプロトタイプチェーン上でobjectを指すため、xiaomingにもtoStringプロパティがあります.
属性が継承ではなくxiaoming自身が所有しているかどうかを判断するには、hasOwnProperty()メソッドを使用します.
var xiaoming = {
    name: '  '
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

五.じょうけんけってい
JavaScriptはnull,undefined,0,NaN,空の文字列''をfalseと見なし,その他の値は一概にtrueと見なしているため,上記のコード条件判断の結果はtrueである.
六.ループ
forループで最も一般的な場所は、インデックスを使用して配列を巡ることです.
var arr = ['a','b','c'];
var i,x;
for(i=0;i

forループの3兄の条件はすべて省略することができて、もしループを脱退する判断条件がなければ、break文でループを脱退しなければならなくて、さもなくば死のループです:
var x = 0;
for(;;){
    //       
    if(x>100){
    break; //  if       
}
}

for...in
forサイクルの変形はfor...Inループです.オブジェクトのすべてのプロパティを順次ループできます.
var o = {
    name: 'jack',
    age: 20,
    city: 'beijing'
};
for(var key in o){
    alert(key); //'name' ,'age' ,'city'
}

オブジェクトが継承するプロパティをフィルタするには、hasOwnProperty()を使用します.
var o = {
    name: 'jack',
    age: 20,
    city: 'beijing'
};
for (var key in 0){
    if(o.hasOwnProperty(key)){
    alert(key); //'name','age','city'
}
}

Arrayもオブジェクトなので、彼の各要素のインデックスはオブジェクトの属性と見なされ、for...Inループは、Arrayのインデックスを直接ループすることができます.
var a = ['a','b','c'];
for(var i in a){
    alert(i); // '0','1','2'
    alert(a[i]); // 'a','b','c'
}
//   ,for...in Array       String   number.