11 – ランダムな英数字文字列を生成します
functiongenerateRandomAlphaNum(len) {
var rdmstring = "";
for( ; rdmString.length return rdmString.substr(0, len);
}
12 – 数値の配列をスクランブルします
varnumbers = [5, 458, 120, -215, 228, 400, 122205, -85411];
numbers = numbers.sort( function(){ return Math.random() - 0.5});
/* 配列番号は、たとえば [120, 5, 228, -215, 400, 458, -85411, 122205] */
13 – 文字列のトリム関数
Java、C#、PHP、およびその他の多くの言語には、文字列内のスペースを削除するために使用される古典的なトリム関数があります。 JavaScript にはそのような関数がないため、この関数を String オブジェクトに追加する必要があります。
String.prototype.trim = function() {return this .replace(/^s |s $/g, "");};//文字列
14 の内部スペースを除き、文字列の先頭と末尾のスペースを削除します。 – 配列を追加する 別の配列に移動
var array1 = [12, " foo" , {name: "Joe"} , -2458];
var array2 = ["Doe" , 555 , 100];
Array.prototype.push. apply(array1, array2);
/* array1 は [12, "foo", {name "Joe"}, -2458, "Doe", 555, 100] と等しくなります */
//In実際、concat は 2 つの配列接続を直接実装できますが、その戻り値は新しい配列です。これは array1
への直接の変更です。
15 – 引数オブジェクトを配列に変換します
var argArray = Array.prototype.slice.call(arguments);
arguments オブジェクトは配列のようなオブジェクトですが、実際の配列ではありません
16 – かどうかを確認します引数は数値 (数値) です
関数isNumber(n){
return !isNaN(parseFloat(n)) && isFinite(n);
}
17 – パラメーターが配列であるかどうかを検証します
function isArray(obj){
return Object.prototype。 toString.call(obj) === '[オブジェクト配列]' ;
}
注: toString() メソッドがオーバーライドされている場合、この手法を使用しても望ましい結果を得ることができません。または、以下を使用することもできます:
Array.isArray (obj); // これは新しい配列メソッドです
複数のフレームを使用しない場合は、instanceof メソッドを使用することもできます。ただし、複数のコンテキストがある場合は、間違った結果が得られます。
var myFrame = document.createElement('iframe');
document.body.appendChild(myFrame);
var myArray = window.frames[window.frames.length-1].Array;
var arr = new myArray(a,b,10 ); / / [a,b,10]
//instanceof は正しく動作しません。myArray はコンストラクターを失います
// コンストラクターはフレーム間で共有されません
arr instanceof Array;
18 – 数値の配列の最大値または最小値を取得します
varnumbers = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxInNumbers = Math.max.apply(Math, numbers);
var minInNumbers = Math.min.apply(Math,numbers);
//翻訳者注: ここでは Function.prototype.apply メソッドを使用してパラメータを渡す手法が使用されています
19 – 配列をクリアします
var myArray = [12, 222, 1000];
myArray.length = 0; // myArray は [] と等しくなります。
20 – 配列から項目を削除するために delete を使用しないでください。 。
配列から項目を削除するには、delete ではなく splice を使用します。 delete を使用すると、元の項目が未定義の項目に置き換えられるだけで、実際に配列から削除されるわけではありません。
このメソッドは使用しないでください:
var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];
items.length // return 11
項目を削除します。 ; // true を返します
items.length; // 11 を返します
/* 項目は [12, 548, "a", 未定義 × 1, 5478, "foo", 未定義 × 1 となります、"Doe"、2154、119] */
を使用します:
var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];
items.length; // return 11
items.splice( 3,1) ;
items.length; // return 10
/* 項目は [12, 548, "a", 5478, "foo", 8852 と等しくなります、未定義 × 1、 "Doe" 、 2154、 119] */
delete メソッドは、オブジェクトの属性を削除するために使用する必要があります。
21 – 長さを使用して配列を切り詰めます
上記の配列をクリアする方法と同様に、length プロパティを使用して配列を切り詰めます。
var myArray = [12, 222, 1000, 124, 98, 10 ];
myArray.length = 4; // myArray は [12, 222, 1000, 124] になります。
また、配列の長さをより大きい値に設定すると、現在の値より 1 つ大きい場合、配列の長さが変更され、新しい未定義の項目が追加されます。 配列の長さは読み取り専用のプロパティではありません。
myArray.length = 10; // 新しい配列の長さis 10
myArray[myArray.length - 1] ; // 未定義
22 – 論理 AND/OR を使用して条件判断を行います
var foo = 10;
foo == 10 && doSomething(); // if (foo == 10) doSomething();
foo == 5 || と同等; // if (foo != 5) doSomething();
論理 AND を使用して関数パラメータのデフォルト値を設定することもできます
function doSomething(arg1){
Arg1 = arg1 || // arg1 がそうでない場合設定すると、Arg1 はデフォルトで 10 に設定されます
}
23 – map() メソッドを使用して配列内の項目を反復処理します
var squares = [1,2,3,4].map(function (val) {
return val * val;
});
// 平方は [1, 4, 9, 16]
24 – 数値を 10 進数の N に丸めます場所
var num =2.443242342;
num = num.toFixed(4); / / num は 2.4432 に等しくなります
25 – 浮動小数点問題
0.1 0.2 === 0.3 // は false
9007199254740992 1 // は 9007199254740992
9007199254740992 に等しい2 //は 9007199254740994 に等しい
なぜこれが起こっているのでしょうか? 0.1 0.2 は 0.30000000000000004 に相当します。すべての JavaScript 数値は内部的に IEEE 754 標準に準拠した 64 ビット バイナリの浮動小数点数として表現されることを知っておく必要があります。詳しい紹介については、このブログ投稿をご覧ください。この問題は、toFixed() メソッドと toPrecision() メソッドを使用して解決できます。
26 – for-in を使用してオブジェクトの内部プロパティをトラバースする場合は、プロパティ のチェックに注意してください
次のコード スニペットは、オブジェクトのプロパティを移動するときにプロトタイプ プロパティへのアクセスを回避できます
for (var name in object) {
if (object.hasOwnProperty(name)) {
// name で何かを実行します
}
}
27 – カンマ演算子
var a = 0;
var b = ( a , 99 );
console.log(a) // a は 1
console.log(b); b は 99 に等しい
28 – 計算またはクエリを必要とするキャッシュ変数
jQuery セレクターの場合、これらの DOM 要素をキャッシュした方がよいでしょう。
var navright = document.querySelector('#right') ;
var navleft = document.querySelector('#left');
var navup = document.querySelector('#up');
var navdown = document.querySelector('#down');
29 – isFinite() を呼び出す前にパラメータを検証します
isFinite(0/0); // false
isFinite("foo"); // true
isFinite(10); ); // true
isFinite(未定義); // false
isFinite(null); // true !!!
30 – 配列内での回避 負のインデックス
var from =numbersArray.indexOf("foo") ; // from は -1 に等しいnumbersArray.splice(from,2); [5 ]
を返す
indexOf を呼び出すときの引数が負でないことを確認してください。
31 – JSON ベースのシリアル化と逆シリアル化
var person = {名前 :'Saad'、年齢 : 26、部署 : {ID : 15、名前 : "研究開発"} };
var stringFromperson = JSON.stringify(person );
/* stringFromPerson は "{"name":"Saad","age":26,"Department":{"ID":15,"name":"R&D"}}" に等しい */
var personFromString = JSON.parse(stringFromPersonal);
/* personFromString は person オブジェクトと等しい */
32 – eval() と Function コンストラクターの使用を避ける
eval と Function を使用するコンストラクターは毎回スクリプト エンジンを呼び出してソース コードを実行可能コードに変換するため、非常にコストのかかる操作です。
var func1 = new Function(functionCode);
var func2 = eval(functionCode);
33 – with() の使用を避ける
with() を使用すると、グローバル変数が挿入されます。したがって、同じ名前の変数の値が上書きされ、無用なトラブルが発生します。
34 – 配列の反復処理に for-in の使用を避ける
次の使用は避けてください:
var sum = 0;
for (var i in arrayNumbers) {
sum = arrayNumbers[i];
}
より良い方法は次のとおりです:
var sum = 0 ;
for (var i = 0, len = arrayNumbers.length; i < len; i ) {
sum = arrayNumbers[i];
}
追加の利点は次のとおりです。 i と len は両方とも変数の値は 1 回だけ実行され、次の方法よりも効率的です:
for (var i = 0; i
なぜですか? arrayNumbers.length はループするたびに計算されるためです。
35 – setTimeout() および setInterval() を呼び出すときに、文字列の代わりに関数を渡します。
文字列を setTimeout() または setInterval() に渡すと、その文字列は eval を使用しているかのように解析され、非常に時間がかかります。
使用しないでください:
setInterval ('doSomethingPeriodical() ', 1000);
setTimeOut('doSomethingAfterFiveSeconds()', 5000)
そして以下を使用します:
setInterval(doSomethingPeriodively, 1000);
setTimeOut(doSomethingAfterFiveSeconds, 5000);
36 – switch/case ステートメントを使用し、3 つ以上の状況を判断する場合、if/else
の長いリストの代わりに、switch/case を使用する方が効率的かつ洗練されます (コードを整理しやすくなります)。ただし、判断する状況が 10 個を超える場合は、switch/case を使用しないでください。
37 – 数値範囲を判断するときに switch/case を使用します
次の状況では、数値範囲を判断するために switch/case を使用することが合理的です:
function getCategory(age) {
var category = "";
switch (true) {
case isNaN(age):
category = "年齢ではありません";
ブレーク; カテゴリ = "赤ちゃん" ;
ブレーク;
デフォルト:
カテゴリ = "若い";
ブレーク;
};
カテゴリを返します;
}
getCategory(5) ; // "Baby" を返します
//一般に、数値範囲を判断するには、if/else を使用する方が適切です。 switch/case は特定の値を判断するのに適しています
38 – 作成したオブジェクトのプロトタイプ オブジェクトを指定します
指定されたパラメーターを持つオブジェクトを作成する関数を次のように記述することができますプロトタイプ:
コードをコピー
}clone(Array).prototype // []
<🎜; >39 – 1 つの HTML エスケープ関数
コードをコピー
を使用しますcatch 句が実行されると、キャッチされた例外オブジェクトが変数に割り当てられ、try-catch-finally 構造内で毎回この変数が作成されます 。
次のような記述は避けてください:
コードをコピー
コードは次のとおりです:var object = [ 'foo' , 'bar'], i;for (i = 0, len = object.length; i try { を使用します:
コードをコピー
コードは次のとおりです:
var object = ['foo', 'bar'], i;
try {
for (i = 0, len = object .length; i
41 – XMLHttpRequests のタイムアウトを設定します。
XHR リクエストに長時間かかると (ネットワークの問題などにより)、リクエストを中止する必要がある場合は、XHR 呼び出しで setTimeout() を使用できます。
コードをコピー
コードは次のとおりです。var xhr = new XMLHttpRequest ();
xhr .onreadystatechange = function () {
if (this.readyState == 4) {xhr.open('GET' 、url、true);
xhr.send();
また、一般に、同期 Ajax リクエストは完全に避ける必要があります。
42 - WebSocket タイムアウトの処理
通常、WebSocket 接続が作成された後、アクティビティがない場合、サーバーは 30 秒後に接続をタイムアウトします。ファイアウォールは、一定期間非アクティブな状態が続くと切断されます。
タイムアウトの問題を防ぐために、サーバーに空のメッセージを断続的に送信する必要がある場合があります。これを行うには、次の 2 つの関数をコードに追加できます。1 つは接続を維持する関数、もう 1 つは接続の保留をキャンセルする関数です。この手法を使用すると、タイムアウトの問題を制御できます。
タイマー ID を使用します:
var timerID = 0;
function keepAlive() {
var timeout = 15000;
if (webSocket.readyState == webSocket.OPEN) {
webSocket.send('');
}
timerId = setTimeout( keepAlive, timeout);
}
function cancelKeepAlive() {
if (timerId) {
cancelTimeout(timerId);
}
}
keepAlive() このメソッドは webSOcket 接続の onOpen() メソッドの最後に追加する必要があり、cancelKeepAlive() は onClose() メソッドの最後に追加します。
43 – プリミティブ演算子は関数呼び出しよりも常に効率的であることに留意してください。 vanillaJSを使用します。 例:
var min = Math.min(a,b);
A.push(v);
を使用し、次のようにします:
var min = a < b ? a b;
A[A.length] = v;
44 – エンコードするときは、コード整理ツール を使用することを忘れないでください。オンラインにする前に、JSLint とコード圧縮ツール (縮小化) (JSMin など) を使用します。 「時間節約ツール: コードの美化および書式設定ツール」
45 – JavaScript は素晴らしいです。
概要
他にもたくさんのヒント、コツ、ベストプラクティスがあると思いますので、他に追加したいことがある場合、または私が共有したものにフィードバックや修正が必要な場合は、コメント欄にその旨を記載してください。 。