序文: これまで、私はブログでjsと 1. js整数の演算|0 と ~~ を使用すると浮動小数点数を整数に変換でき、同様の parseInt や Math.round よりも効率が速くなります。ピクセルやアニメーションの変位効果を処理するときに非常に便利です。パフォーマンスの比較については、こちらをご覧ください。 var foo = (12.4 / 4.13) | 0; // 結果は3 var bar = ~~(12.4 / 4.13); //結果は3 もう一つのちょっとしたコツがあります! ! 2 つの感嘆符を使用すると、値をブール値にすばやく変換できます。テストできます! var eee="eee"; 警報(!!eee) 返されるのは true です。つまり、すべての値の前に ! が付きます。 !すべて true に等しい可能性があります。値が元々ブール値、または undefined、null、0、false、NaN、'' でない限り、私が言及した 2. ネイティブアラートを書き換えてポップアップボックスの数を記録する(関数() { var oldAlert = window.alert, カウント = 0; window.alert = 関数(a) { カウント++; oldAlert(a + "\n アラートを " + count + " 回呼び出しました。やめてください。これは悪です!"); }; })(); alert("こんにちは、Haorooms"); 3. 中間変数を宣言せずにデジタル交換する方法2 つの数値を交換する一般的な方法は中間変数を宣言することですが、今日の方法は少し変わっています。中間変数を宣言する必要はありません。どのように実装されているかを見てみましょう。 var a=1,b=2;a=[b,b=a][0]; コンソールログ('a:'+a+',b:'+b); //出力a:2,b:1 この方法はいかがでしょうか? 爽快感を感じませんか? 4. すべては物体である
基本的な数値型の場合、 同時に、 5. If文のバリエーションif ステートメントを記述する必要がある場合は、より簡単な方法を試して、代わりに たとえば、上記のコードはまず今日の日付を取得します。日曜日の場合はポップアップ ウィンドウが表示され、それ以外の場合は何も行われません。論理演算は短絡できることはわかっています。論理 AND 式の場合、両方が true の場合にのみ結果が true になります。前日の変数が false と判断された場合、AND 式全体の結果が false になるため、後続のアラートは実行されません。前日が true の場合、後続のコードは引き続き実行され、式全体の真偽が判定される必要があります。これは if の効果を実現するために使用されます。 従来の if 文では、実行本体のコードが 1 つの文を超える場合は中括弧が必要です。ただし、コンマ式を使用すると、中括弧なしで任意のコードを実行できます。 if(条件) alert(1),alert(2),console.log(3); 6. ==の代わりに===を使用する== (または !=) 演算子は、必要に応じて自動的に型変換を実行します。 === (または !==) 演算では変換は実行されません。値と型の両方を比較し、== よりも高速であると考えられています。 [10] === 10 // 偽です [10] == 10 // は真 '10' == 10 // は真 '10' === 10 // は偽です [] == 0 // は真 [] === 0 // は偽 '' == false // は true ですが、true == "a" は false です '' === false // は偽です 7. クロージャを使用してプライベート変数を実装する関数 Person(名前, 年齢) { this.getName = function() { 名前を返します; }; this.setName = function(newName) { name = newName; }; this.getAge = function() { 年齢を返します; }; this.setAge = function(newAge) { age = newAge; }; // コンストラクターで初期化されていないプロパティ var occupation; this.getOccupation = function() { 職業を返します; }; this.setOccupation = function(newOcc) { 職業 = 新しいOcc; }; } 8. オブジェクトコンストラクタを作成する関数 Person(firstName, lastName){ _firstName_ は、_firstName_ の後に続く最初の名前です。 this.lastName = 姓; } var Saad = new Person("Saad", "Mousliki"); 9. typeof、instanceof、コンストラクタに注意するvar arr = ["a", "b", "c"]; typeof arr; // "object" を返す arr 配列のインスタンス // true arr.コンストラクタ(); //[] 10. 自己呼び出し関数を作成するこれは 通常は次のようになります。 (関数(){ // 自動的に実行されるプライベートコード })(); (関数(a,b){ var 結果 = a+b; 結果を返します。 })(10,20) 11. 配列からランダムな項目を取得するvar items = [12, 548, 'a', 2, 5478, 'foo', 8852, , 'Doe', 2145, 119]; var randomItem = items[Math.floor(Math.random() * items.length)]; 12. 特定の範囲内で乱数を取得するこのコード スニペットは、最小値と最大値の間のランダムな給与値などのテスト データを生成する場合に役立ちます。 var x = Math.floor(Math.random() * (max - min + 1)) + min; 13. 0から設定された最大値までのデジタル配列を生成するvar numbersArray = [] 、最大値 = 100; for( var i=1; numbersArray.push(i++) < max;); // 数値 = [0,1,2,3 ... 100] 14. 英数字のランダムな文字列を生成する関数generateRandomAlphaNum(len) { var rdmstring = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); rdmString.substr(0, len) を返します。 } //メソッドgenerateRandomAlphaNum(15)を呼び出します。 15. 数字の配列をシャッフルするvar 数値 = [5, 458, 120, -215, 228, 400, 122205, -85411]; 数値 = 数値.sort(function(){ return Math.random() - 0.5}); /* 配列の番号は、例えば [120, 5, 228, -215, 400, 458, -85411, 122205] になります */ 16. 文字列トリム機能String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g, "");}; 17. 配列を別の配列に追加するvar array1 = [12 , "foo" , {name: "Joe"} , -2458]; var array2 = ["Doe", 555, 100]; 配列.プロトタイプ.プッシュ.適用(配列1、配列2); /* 配列1は[12, "foo", {name "Joe"}, -2458, "Doe", 555, 100]に等しくなります */ 18. 引数オブジェクトを配列に変換するvar argArray = Array.prototype.slice.call(引数);
19. パラメータが数値であるかどうかを確認する関数isNumber(n){ 20. パラメータが配列であるかどうかを確認する関数isArray(obj){ Object.prototype.toString.call(obj) === '[オブジェクト配列]' を返します。 }
Array.isArray(obj); // これは新しい配列メソッドです 複数の 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 配列インスタンス; // false
21. 数値配列の最大値または最小値を取得するvar 数値 = [5, 458, 120, -215, 228, 400, 122205, -85411]; var maxInNumbers = Math.max.apply(Math, 数値); var minInNumbers = Math.min.apply(Math, numbers);
22. 配列をクリアするvar myArray = [12, 222, 1000]; myArray.length = 0; // myArrayは[]と等しくなります。 23. 配列内の項目を削除するために delete を使用しないでください。配列から項目を削除するには、delete ではなく このアプローチは使用しないでください: var items = [12, 548 ,'a', 2, 5478, 'foo', 8852, , 'Doe',2154, 119]; items.length; // 11 を返す アイテム[3]を削除します。 // trueを返します items.length; // 11 を返す /* 項目は [12, 548, "a", undefined × 1, 5478, "foo", 8852, undefined × 1, "Doe", 2154, 119] に等しくなります */ そして次のように使用します: var items = [12, 548 ,'a', 2, 5478, 'foo', 8852, , 'Doe',2154, 119]; items.length; // 11 を返す アイテムをスプライス(3,1); items.length; // 10 を返す /* 項目は [12, 548, "a", 5478, "foo", 8852, undefined × 1, "Doe", 2154, 119] に等しくなります */ オブジェクトのプロパティを削除するには、 24. 配列を切り捨てるには長さを使う上記の配列をクリアする方法と同様に、 var myArray = [12, 222, 1000, 124, 98, 10]; myArray.length = 4; // myArrayは[12, 222, 1000, 124]になります。 さらに、配列の myArray.length = 10; // 新しい配列の長さは 10 です myArray[myArray.length - 1]; // 未定義 25. 条件判断には論理AND/ORを使用する(V) と同じ、変換ステートメントの場合! var foo = 10; foo == 10 && doSomething(); // if (foo == 10) doSomething(); と同等 foo == 5 || doSomething(); // if (foo != 5) doSomething(); と同等 論理 AND は、関数パラメータのデフォルト値を設定するためにも使用できます。 関数doSomething(arg1){ Arg1 = arg1 || 10; // arg1が設定されていない場合、Arg1はデフォルトで10になります } 26. map() メソッドを使用して配列内の項目を反復処理するvar squares = [1,2,3,4].map(関数(val) { val *val を返します。 }); // 正方形は [1, 4, 9, 16] に等しくなります 27. 数値を小数点N桁に丸めるvar 数値 =2.443242342; num = num.toFixed(4); // numは2.4432になります 28. 浮動小数点問題0.1 + 0.2 === 0.3 // は偽です 9007199254740992 + 1 // は 9007199254740992 に等しい 9007199254740992 + 2 // は 9007199254740994 に等しい なぜこのようなことが起こるのでしょうか? 0.1+0.2は0.300000000000000004になります。すべての JavaScript 数値は、IEEE 754 標準に準拠した 64 ビットの 2 進浮動小数点数として内部的に表現されることに注意してください。詳細については、このブログ投稿をお読みください。この問題は、toFixed() メソッドと toPrecision() メソッドを使用して解決できます。 29. for-inを使用してオブジェクトの内部プロパティを走査する場合、プロパティのチェックに注意してください。次のコード スニペットは、オブジェクトのプロパティを反復処理するときにプロトタイプ プロパティにアクセスしないようにします。 for (オブジェクト内の変数名) { オブジェクトが独自のプロパティを持っている場合(名前) // 名前を使って何かする } } 30. カンマ演算子var a = 0; var b = ( a++, 99 ); console.log(a); // aは1になります console.log(b); // bは99に等しい 31. 計算やクエリを必要とする変数をキャッシュする
var navright = document.querySelector('#right'); var navleft = document.querySelector('#left'); var navup = document.querySelector('#up'); var navdown = document.querySelector('#down'); 32. isFinite() を呼び出す前にパラメータを確認するisFinite(0/0); // 偽 isFinite("foo"); // 偽 isFinite("10"); // 真 isFinite(10); // 真 isFinite(未定義); // 偽 isFinite(); // 偽 isFinite(null); // 真です!!! 33. 配列内の負のインデックスを避けるvar 数値配列 = [1,2,3,4,5]; var from = numbersArray.indexOf("foo") ; // from は -1 に等しい numbersArray.splice(from,2); // [5] を返します
34. JSONベースのシリアル化とデシリアル化
var person = {name :'Saad', age : 26, department : {ID : 15, name : "R&D"} }; var stringFromPerson = JSON.stringify(person); /* stringFromPerson は "{"name":"Saad","age":26,"department":{"ID":15,"name":"R&D"}}" に等しい */ var personFromString = JSON.parse(stringFromPerson); /* personFromString は person オブジェクトと等しい */ 35. eval() と Function コンストラクタの使用を避ける
var func1 = 新しい関数(関数コード); var func2 = eval(関数コード); 36. with()の使用を避ける
37. 配列を走査する際にfor-inの使用を避けるこのアプローチは使用しないでください。 var 合計 = 0; for (var i in arrayNumbers) { 合計 += 配列数値[i]; } より良い方法は次のとおりです。 var 合計 = 0; (var i = 0, len = arrayNumbers.length; i < len; i++) { 合計 += 配列数値[i]; } 追加の利点は、i と 以下よりも効率的です: (var i = 0; i < arrayNumbers.length; i++) の場合 なぜ? 38. setTimeout() および setInterval() を呼び出すときは、文字列ではなく関数を渡します。 使用しないでください: 間隔を設定します('doSomethingPeriodically()', 1000); setTimeOut('doSomethingAfterFiveSeconds()', 5000) そして次のように使用します: setInterval(定期的に何かを実行する, 1000); タイムアウトを設定します(doSomethingAfterFiveSeconds, 5000); 39. 長いif/elseシーケンスの代わりにswitch/case文を使用する判断すべき状況が 2 つ以上ある場合は、 40. 値の範囲を判断するときはswitch/caseを使用する次の状況では、 関数 getCategory(年齢) { var カテゴリー = ""; スイッチ(真){ isNaN(年齢)の場合: category = "年齢ではありません"; 壊す; ケース(年齢 >= 50 歳): カテゴリ = "古い"; 壊す; ケース(年齢 <= 20): カテゴリ = "赤ちゃん"; 壊す; デフォルト: カテゴリ = "若い"; 壊す; }; 返品カテゴリ; } getCategory(5); // 「Baby」を返します
41. 作成したオブジェクトのプロトタイプオブジェクトを指定する指定されたパラメータをプロトタイプとしてオブジェクトを作成する関数を記述することができます。 関数クローン(オブジェクト) { 関数 OneShotConstructor(){}; OneShotConstructor.prototype = オブジェクト; 新しい OneShotConstructor() を返します。 } clone(Array).prototype; // [] 42. HTMLエスケープ関数 function escapeHTML(text) { var replacements= {"<": "<", ">": ">","&": "&", "\"": """}; 戻り値 text.replace(/[<>&"]/g, function(文字) { 置換文字[文字]を返します。 }); } 43. ループ内でtry-catch-finallyを使用しない実行時に、 次のような書き方は避けてください: var オブジェクト = ['foo', 'bar'], i; (i = 0, len = object.length; i < len; i++) の場合 { 試す { // 例外をスローする何かを実行する } キャッチ(e){ // 例外を処理する } } そして次のように使用します: var オブジェクト = ['foo', 'bar'], i; 試す { (i = 0, len = object.length; i < len; i++) の場合 { // 例外をスローする何かを実行する } } キャッチ(e){ // 例外を処理する } 44. XMLHttpRequests のタイムアウトを設定します。 XHR リクエストに長い時間がかかる場合 (たとえば、ネットワークの問題が原因)、リクエストを中止する必要がある可能性があります。この場合、 var xhr = 新しい XMLHttpRequest(); xhr.onreadystatechange = 関数 () { this.readyState == 4の場合{ タイムアウトをクリアします(タイムアウト); // 応答データを使って何かを行う } } var タイムアウト = setTimeout( 関数 () { xhr.abort(); // エラーコールバックを呼び出す }, 60*1000 /* 1分後にタイムアウト */ ); xhr.open('GET', url, true); xhr.send(); また、一般的には同期 Ajax リクエストは完全に避けるべきです。 45. WebSocket タイムアウトの処理通常、 タイムアウトの問題を防ぐために、空のメッセージを断続的にサーバーに送信することをお勧めします。これを行うには、接続を維持するための関数と接続をキャンセルするための関数の 2 つの関数をコードに追加します。このテクニックを使用すると、タイムアウトの問題を制御できます。 タイマーIDを使用します: var タイマーID = 0; 関数keepAlive() { var タイムアウト = 15000; webSocket.readyState が webSocket.OPEN の場合 { webSocket.send(); } タイマーID = setTimeout(keepAlive, タイムアウト); } 関数 cancelKeepAlive() { if (タイマーID) { タイマーIDをキャンセルします。 } }
46. プリミティブ演算子は常に関数呼び出しよりも効率的です。 たとえば、次のようにする代わりに: var min = Math.min(a,b); A. プッシュ(v); そして次のように使用します: var min = a < b ? ab; A[A.長さ] = v; 47. 整数からランダムに値を選択する特定の有名な引用やニュースイベントをランダムに表示できる非常に便利な数式があります。 値 上記の式を覚えておいてください! 〜 48. 時刻のフォーマット後、先頭の数字にゼロがなくなる対処法はいろいろありますが、以下の方法がより簡単かつ効果的ですので記録しておきましょう! 関数 paddingLeftZero(str){ ("00"+str).substr(str.length) を返します。 } 49. js はクッキーを設定しますgetCookie: 関数 (名前) { var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); (arr = document.cookie.match(reg)) の場合 unescape(arr[2])を返します。 それ以外 null を返します。 }, setCookie: 関数 (名前、値、日数) { var exp = 新しい Date(); exp.setTime(exp.getTime() + 日数 * 24 * 60 * 60 * 1000); document.cookie = 名前 + "=" + escape(値) + ";expires=" + exp.toGMTString(); }, 49. jsはその日の24時に時刻を取得します新しい日付(新しい日付(新しい日付().toLocaleDateString()).getTime()+24*60*60*1000); 同様に0時の時刻 新しい日付(新しい日付(新しい日付().toLocaleDateString()).getTime()); これで、JavaScript に関する 49 の実用的なヒントに関する記事は終了です。JavaScript に関する実用的なヒントに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブサイトデザインの経験 ウェブサイト構築におけるよくある間違いのまとめ
「Tik Tok」も大人気で、ユーザー数は7億人と言われています。今日は、注目を集めるためにTikT...
<div class="box"> <画像 /> &l...
1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...
目次Cocos Creator のリソース管理に関する問題リソースの依存関係リソースの使用レスローダ...
前回の記事では、MySQL 5.7.19 無償インストール版 (64 ビット) の設定方法についての...
BEM は、Web 開発に対するコンポーネントベースのアプローチです。ユーザー インターフェイスを独...
nohup コマンドUnix/Linux を使用する場合、通常はプログラムをバックグラウンドで実行す...
1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...
Vite とは何ですか? (フロントエンドの新しいおもちゃです) Vite は、ネイティブ ES モ...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...
序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...
1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...
1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...
Mysql でよく使用される表示コマンド1. 現在のデータベース サーバー内のデータベースの一覧を表...
1. MySQL 1.1 MySQLのインストールmysql-5.5.27-winx64 ダウンロー...