49 個の JavaScript のヒントとコツ

49 個の JavaScript のヒントとコツ

序文:

これまで、私はブログでjsとjavascriptについての記事をかなり書いてきました。最近、いくつかの実用的なjsスキルをまとめた海外のブログを読みました。当初はそれを直接翻訳してブログに載せたかったのですが、オンラインで確認したところ、一部のネットユーザーがすでに翻訳しているようなので、ここではこれ以上面倒な作業はしません。これを基に、これまで見てきた js の知識をいくつか統合し、ブログにまとめていきます。以前、jQuery のよく使われるコードをまとめたので、ご覧ください。

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、'' でない限り、私が言及したundefinednull0falseNaN 、'' は元々 false なので、 2 つが追加されます。 !その後もそれは嘘のままです。

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. すべては物体である

JavaScript世界では、すべてがオブジェクトです。 nullundefinedを除いて、数値、文字列、ブール値などの他の基本型には、対応するパッケージ オブジェクトがあります。オブジェクトの特性の 1 つは、オブジェクト上でメソッドを直接呼び出すことができることです。

基本的な数値型の場合、 toStringメソッドを呼び出そうとすると失敗しますが、括弧で囲むと失敗しません。内部実装では、対応するラッパー オブジェクトを使用して基本型をオブジェクトに変換します。したがって、 (1).toString() new Number(1).toString()。したがって、数値、文字列、ブール値などの基本型をオブジェクトとして使用することは可能ですが、適切な構文に注意してください。

同時に、 JavaScriptでは、数値が浮動小数点型と整数型に分かれていないことに気付きました。実際、すべての数値は浮動小数点型ですが、小数点は省略されています。たとえば、1 は 1. と記述できますが、1.toString() を試みるとエラーが発生するのはそのためです。正しい記述方法は、1..toString() のように記述するか、上記のように括弧を追加します。ここでの括弧の目的は、JS パーサーが 1 の後のドットを小数点として扱わないように修正することです。内部実装は上記の通りで、1. ラッパー オブジェクトをオブジェクトに変換してからメソッドを呼び出します。

5. If文のバリエーション

if ステートメントを記述する必要がある場合は、より簡単な方法を試して、代わりにJavaScriptで論理演算子を使用することをお勧めします。

たとえば、上記のコードはまず今日の日付を取得します。日曜日の場合はポップアップ ウィンドウが表示され、それ以外の場合は何も行われません。論理演算は短絡できることはわかっています。論理 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.getOc​​cupation = 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. 自己呼び出し関数を作成する

これはSelf-Invoked Anonymous FunctionまたはIIFE-Immediately Invoked Function Expression ) と呼ばれることがよくあります。作成後すぐに自動的に実行される関数です。

通常は次のようになります。

(関数(){
    // 自動的に実行されるプライベートコード
})();
(関数(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(引数);


[翻訳者注: arguments オブジェクトは配列のようなオブジェクトですが、実際の配列ではありません]

19. パラメータが数値であるかどうかを確認する

関数isNumber(n){
!isNaN(parseFloat(n)) && isFinite(n) を返します。
}

20. パラメータが配列であるかどうかを確認する

関数isArray(obj){
    Object.prototype.toString.call(obj) === '[オブジェクト配列]' を返します。
}


注意: toString() メソッドがオーバーライドされている場合、この手法を使用しても目的の結果が得られない可能性があります。または、以下を使用することもできます。

Array.isArray(obj); // これは新しい配列メソッドです

複数のframesを使用していない場合は、 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 配列インスタンス; // false


[翻訳者注: 配列の判定方法についてはインターネット上で多くの議論があります。Google で検索してみてください。この記事は非常に詳細に書かれています。 】

21. 数値配列の最大値または最小値を取得する

var 数値 = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxInNumbers = Math.max.apply(Math, 数値);
var minInNumbers = Math.min.apply(Math, numbers);


[翻訳者注: ここでは、パラメータを渡すために Function.prototype.apply メソッドが使用されています]

22. 配列をクリアする

var myArray = [12, 222, 1000];
myArray.length = 0; // myArrayは[]と等しくなります。

23. 配列内の項目を削除するために delete を使用しないでください。

配列から項目を削除するには、delete ではなくspliceを使用します。 delete を使用すると、元の項目がundefinedに置き換えられるだけで、配列から実際に削除されるわけではありません。

このアプローチは使用しないでください:

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] に等しくなります */

オブジェクトのプロパティを削除するには、 deleteメソッドを使用する必要があります。

24. 配列を切り捨てるには長さを使う

上記の配列をクリアする方法と同様に、 lengthプロパティを使用して配列を切り捨てます。

var myArray = [12, 222, 1000, 124, 98, 10];
myArray.length = 4; // myArrayは[12, 222, 1000, 124]になります。


さらに、配列のlength現在よりも大きい値に設定すると、配列の長さが変更され、それを補うために新しい未定義の項目が追加されます。 配列のlength読み取り専用プロパティではありません。

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. 計算やクエリを必要とする変数をキャッシュする

jQueryセレクターの場合、これらの DOM 要素をキャッシュしたほうがよいでしょう。

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] を返します

indexOfを呼び出すときの引数が負の数でないことを確認してください。

34. JSONベースのシリアル化とデシリアル化

(serialization and deserialization)

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 コンストラクタの使用を避ける

evalおよびFunctionコンストラクターを使用すると、スクリプト エンジンを呼び出してソース コードを実行可能コードに変換するたびに、非常にコストのかかる操作になります。

var func1 = 新しい関数(関数コード);
var func2 = eval(関数コード);


36. with()の使用を避ける

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 とlenの両方の値が 1 回だけ評価されることです。

以下よりも効率的です:

(var i = 0; i < arrayNumbers.length; i++) の場合

なぜ? arrayNumbers.lengthループのたびに計算されるためです。

38. setTimeout() および setInterval() を呼び出すときは、文字列ではなく関数を渡します。

setTimeout()またはsetInterval()に文字列を渡すと、文字列はevalを使用しているかのように解析されますが、これには非常に時間がかかります。

使用しないでください:

間隔を設定します('doSomethingPeriodically()', 1000);
setTimeOut('doSomethingAfterFiveSeconds()', 5000)


そして次のように使用します:

setInterval(定期的に何かを実行する, 1000);
タイムアウトを設定します(doSomethingAfterFiveSeconds, 5000);

39. 長いif/elseシーケンスの代わりにswitch/case文を使用する

判断すべき状況が 2 つ以上ある場合は、 switch / caseを使用する方が効率的でエレガントです (コードを整理しやすくなります)。ただし、判断する状況が 10 個を超える場合は、switch/case を使用しないでください。

40. 値の範囲を判断するときはswitch/caseを使用する

次の状況では、 switch / caseを使用して値の範囲を決定するのが妥当です。

関数 getCategory(年齢) {
    var カテゴリー = "";
    スイッチ(真){
        isNaN(年齢)の場合:
            category = "年齢ではありません";
            壊す;
        ケース(年齢 >= 50 歳):
            カテゴリ = "古い";
            壊す;
        ケース(年齢 <= 20):
            カテゴリ = "赤ちゃん";
            壊す;
        デフォルト:
            カテゴリ = "若い";
            壊す;
    };
    返品カテゴリ;
}
getCategory(5); // 「Baby」を返します

[翻訳者注: 一般的に、値の範囲を判断するには if/else を使用する方が適切です。値を決定するには、Switch/case の方が適しています。

41. 作成したオブジェクトのプロトタイプオブジェクトを指定する

指定されたパラメータをプロトタイプとしてオブジェクトを作成する関数を記述することができます。

関数クローン(オブジェクト) {
    関数 OneShotConstructor(){};
    OneShotConstructor.prototype = オブジェクト;
    新しい OneShotConstructor() を返します。
}
clone(Array).prototype; // []
42. HTMLエスケープ関数 function escapeHTML(text) {
    var replacements= {"<": "<", ">": ">","&": "&", "\"": """};
    戻り値 text.replace(/[<>&"]/g, function(文字) {
        置換文字[文字]を返します。
    });
}

43. ループ内でtry-catch-finallyを使用しない

実行時に、 catch句が実行されるたびに、キャッチされた例外オブジェクトが変数に割り当てられ、 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 リクエストに長い時間がかかる場合 (たとえば、ネットワークの問題が原因)、リクエストを中止する必要がある可能性があります。この場合、 XHR呼び出しでsetTimeout()を使用できます。

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 タイムアウトの処理

通常、 WebSocket接続が確立された後、アクティビティがない場合、サーバーは 30 秒後に接続をtime out 。ファイアウォールは、一定時間操作が行われないと切断されます。

タイムアウトの問題を防ぐために、空のメッセージを断続的にサーバーに送信することをお勧めします。これを行うには、接続を維持するための関数と接続をキャンセルするための関数の 2 つの関数をコードに追加します。このテクニックを使用すると、タイムアウトの問題を制御できます。

タイマーIDを使用します:

var タイマーID = 0;
関数keepAlive() {
    var タイムアウト = 15000;
    webSocket.readyState が webSocket.OPEN の場合 {
        webSocket.send();
    }
    タイマーID = setTimeout(keepAlive, タイムアウト);
}
関数 cancelKeepAlive() {
    if (タイマーID) {
        タイマーIDをキャンセルします。
    }
}


keepAlive()メソッドはwebSOcket接続のonOpen()メソッドの最後に追加し、 cancelKeepAlive()メソッドはonClose()メソッドの最後に追加する必要があります。

46. プリミティブ演算子は常に関数呼び出しよりも効率的です。

VanillaJSを使用してください。

たとえば、次のようにする代わりに:

var min = Math.min(a,b);
A. プッシュ(v);


そして次のように使用します:

var min = a < b ? ab;
A[A.長さ] = v;

47. 整数からランダムに値を選択する

特定の有名な引用やニュースイベントをランダムに表示できる非常に便利な数式があります。

=Math.floor(Math.random()*可能な値の総数 + 最初の可能な値)
例えば、2から10までの値を選択するには、次のように記述します。

var num=Math.floor(Math.random()*9+2)

上記の式を覚えておいてください! 〜

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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript の書き方に関する 5 つのヒントを共有する
  • 一般的な JavaScript 配列操作スキル (パート 2)
  • 一般的なJavaScript配列操作テクニック
  • JavaScript 構造化分解割り当ての実践ガイド
  • インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント
  • 仕事の効率を上げるJS略語スキル20選
  • JavaScript を学ぶときに知っておくべき 3 つのヒント
  • 7つのキラーJSのヒントを共有

<<:  ボタンをEnterキーに関連付けるjsコード

>>:  ウェブサイトデザインの経験 ウェブサイト構築におけるよくある間違いのまとめ

推薦する

CSS で適応型ディバイダーを巧みに実装する N 通りの方法

分割線はウェブページでよく使われるデザインです。例えば、Zhihuのその他の回答をご覧ください。 こ...

Vue ページ監視ユーザープレビュー時間機能実装コード

最近のビジネスでは、オンライン トレーニング システムが特定のオンライン プレビュー ページに対する...

MySQL スケジュールバックアップタスクの簡単な分析

導入実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。...

Ansibleを使用してTomcatをバッチでデプロイする方法

1.1 ディレクトリ構造の構築この操作は、nginx+mysql+tomcat+dbのディレクトリ構...

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

Vue パッケージ化後の空白ページの解決策

1. vue-cli がプロジェクト パッケージを作成した後にページが空白になる問題の解決方法コマン...

トリガーメソッドを使用して、ファイルタイプの入力をクリックせずにポップアップファイル選択ダイアログボックスを実現します。

トリガー メソッドを使用できます。JavaScript にはネイティブのトリガー関数はありません。自...

TypeScript インターフェース定義ケースチュートリアル

インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...

mysql データベースの作成、ユーザーの追加、ユーザー認証の実用的な方法

1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

Vue.jsは背景テーブルコンポーネントのカプセル化を管理します

目次問題分析なぜカプセル化なのかパッケージの内容は何ですか?テーブルコンポーネントをカプセル化するデ...

CSS継承方法

次の背景画像を持つ div があるとします。 次の反射効果を作成します。 方法はたくさんありますが、...

CSSのさまざまな背景、使用シナリオ、テクニックの詳細な分析

この記事はGitHub https://github.com/qq449245884/xiaozhi...

CSS プロパティ display:flow-root 宣言を 1 つの記事でマスターする

zhangxinxu より https://www.zhangxinxu.com/wordpress...

CentOS 6.x のインストール時に発生するエラー「ディスク sda に BIOS RAID メタデータが含まれています」の解決方法

今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...