1.== Javascript有兩組相等運算符,一組是==和!=,另一組是===和!==。前者只比較值的相等,後者除了值以外,還比較類型是否相同。
請盡量不要使用前一組,永遠只使用===和!==。因為==預設會進行類型轉換,規則十分難記。如果你不相信的話,請回答下面五個判斷式的值是true還是false:
false == 'false'
false == undefined
false ==false == undefined
false ==false == undefined
〬
0 == ''
前三個是false,後兩個是true。
2.with
with的本意是減少鍵盤輸入。例如
obj.a = obj.b;
obj.c = obj.d;
可以簡寫成
程式碼如下:
with(obj) {
a = b;
a = b;
〜、 ,在實際運作時,解釋器會先判斷obj.b和obj.d是否存在,如果不存在的話,再判斷全域變數b和d是否存在。這樣就導致了低效率,而且可能會導致意外,因此最好不要使用with語句。
3.eval eval用來直接執行一個字串。這句語句也是不應該使用的,因為它有效能和安全性的問題,並且使得程式碼更難閱讀。
eval能夠做到的事情,不用它也能做到。例如
eval("myValue = myObject." myKey ";");
可以直接寫成
myValue = myObject[myKey];
至於ajax操作返回的json字串,可以使用官方網站字串提供的解析器json_parse.js運行。
4.continue 這條指令的作用是回到循環的頭部,但是循環本來就會回到頭部。所以透過適當的構造,完全可以避免使用這條指令,使得效率得到改善。
5.switch 貫穿 switch結構中的case語句,預設是順序執行,除非遇到break,return和throw。有的程式設計師喜歡利用這個特點,例如
㟎> 程式碼如下:
case 1:
case 1:
case 1:
break;
break;
break;
〜 break;
〜 break;
〜>這樣寫錯。因此建議避免switch貫穿,凡是有case的地方,一律加上break。 複製程式碼
程式碼如下:
約大) { 🎜> break;
case 2:
break;
break;
『
6. 単一行のブロック構造 if、while、do、for はすべてブロック構造のステートメントですが、単一行のコマンドも受け入れることができます。たとえば、
if (ok) t = true;
は、
if (ok)
t = true; と書かれていても、コードを読むのに役立ちません。将来ステートメントを追加するときに間違いを犯しやすくなります。コマンド行が 1 行のみかどうかに関係なく、中括弧を追加することをお勧めします。
if (ok){
t = true;
}
7. そして --
インクリメント演算子とデクリメント演算子 -- から直接来ます。 C 言語では、表面的にはコードを非常にコンパクトにできますが、実際にはコードがより複雑でわかりにくくなります。したがって、コードをきれいにし、読みやすくするために、これを使用しない方がよいでしょう。
8. ビット単位の演算子
JavaScript は、ビット単位の AND&、ビット単位の OR|、ビット単位の XOR^、ビット単位の NOT、左シフト << などの Java のビット単位演算子を完全に適用します。 、符号付き右シフト>>、およびゼロパディング右シフト>>>。
この演算子のセットは整数用であるため、JavaScript ではまったく役に立ちません。JavaScript 内ではすべての数値が倍精度浮動小数点数として保存されるためです。これらを使用すると、JavaScript はまずオペランドを整数に変換してから操作を実行する必要があるため、速度が低下します。さらに、「ビットごとの AND 演算子」& は「論理 AND 演算子」&& と同じであるため、混同しやすいです。
9. 関数ステートメント
JavaScript で関数を定義するには、
Function foo() { }
と
var の 2 つの方法があります。 foo = function () { }
2 つの記述方法は完全に同等です。ただし、前者の書き方は解析中にパーサーによって自動的にコードの先頭に昇格されるため、関数を最初に定義してから使用するという要件に違反します。そのため、後者の書き方を使用することをお勧めします。関数を定義するとき。
10. 基本データ型のオブジェクトのパッケージ化
JavaScript の基本データ型には文字列、数値、ブール値が含まれており、それらはすべて対応するパッケージ化オブジェクト String、Number、ブール値。したがって、関連する値を次のように定義します。
new String( "Hello World");
new Number(2000);
new Boolean(false);
このように書くのは全く不要で非常に混乱しますので、使用しないことをお勧めします。
さらに、新しいオブジェクトと新しい配列の使用は推奨されませんが、{} と [] で置き換えることができます。
11.新しいステートメント
JavaScript は、Lambda 関数をサポートする世界で最初に広く使用されている言語であり、本質的には Lisp に似た関数型プログラミング言語です。しかし、現在の世界では、プログラマーの 90% 以上がオブジェクト指向プログラミングを使用しています。主流に近づくために、JavaScript は妥協してクラスの概念を採用し、クラスに基づいてオブジェクトを生成できるようにしました。
クラスは次のように定義されています:
var Cat = function (name) {
this.name = name; new Cat('mimi');
関数を使用してクラスを生成し、new を使用してオブジェクトを生成するこの構文は、実際には非常に奇妙で直感的ではありません。全然。また、使っているとnewの追加を忘れがちで実行関数になってしまい、その後不可解にもグローバル変数がいくつか増えてしまいます。したがって、この方法でオブジェクトを作成せず、回避策を使用することをお勧めします。
Douglas Crockford は関数を与えました:
コードをコピー
コードは次のとおりです:
プロトタイプ オブジェクトを操作するオブジェクトを作成するときにこの関数を使用します:
コードをコピーします
コードは次のとおりです:
12.void
言語では、void は値を表現しない型です。しかし、Javascript では、void はオペランドを受け入れ、未定義を返す演算子です。
void 0; // 未定義
このコマンドは役に立たず、混乱を招くため、使用しないことをお勧めします。