ネイティブJSで禁止すべきメソッドの記述

ネイティブJSで禁止すべきメソッドの記述

ブロックレベル関数

ES6 より前では厳密モードは禁止される必要があります。 ES6 以降で利用可能になった関数のスコープは、関数が宣言されているブロックです。非厳密モードではこれを無効にする必要があります。

真の場合{
    function test() { //ブロックレベル関数 console.log(1);
    }
}
テスト();

オブジェクトのプロトタイプを直接変更する

ブラウザは、インスタンスを呼び出す前にプロトタイプを最適化し、オブジェクトのメソッドのメモリ位置を事前に計画します。したがって、プロトタイプを直接変更することはできません。以下の2つの方法は禁止されるべきである

Object.setPrototypeOfを使用してプロトタイプを変更します

関数a(){}
a.プロトタイプ = {
  a_prop: "値"
};
関数b(){}
var プロトコル = {
  b_prop: "b 値"
};
オブジェクト.setPrototypeOf()
  プロト、プロトタイプ
);
b.prototype = プロトタイプ;
var test = new b;
console.log(test.a_prop); // 値
console.log(test.b_prop); // b 値

オブジェクトの__proto__属性を直接変更する

関数a(){}
a.プロトタイプ = {
  a_prop: "値"
};
関数b(){}
var プロトコル = {
  b_prop: "b 値",
  __proto__: a.prototype //オブジェクト b の __prototype__ 属性を直接変更します};
b.prototype = プロトタイプ;
var test = new b;
console.log(test.a_prop); // 値
console.log(test.b_prop); // b 値

の使用法:

var a = {
    p1: 1,
    p2: 2
}
(a) {と
    3 は 0 です。
}
コンソールログ(a.p1);

with の使用は禁止されるべきです。例:

関数a(arg1, arg2) {
  (arg2){で
    console.log(arg1); // 最初のパラメータを出力するか、arg2 の arg1 プロパティを出力するかを判断できません}
}
var arg2 = {arg1:1}
a("引数1", 引数2)

呼び出された人

arguments.callee は現在実行中の関数を表します。

関数a(arg1) {
    (引数1>1)の場合{
        arg1 * arguments.callee(arg1 - 1) を返します。
    }
    それ以外 {
        1 を返します。
    }
}
コンソールログ(a(3)); // 6

関数が自分自身を呼び出す必要がある場合は、代わりに arguments.callee() を使用し、関数を名前で直接呼び出します。

関数a(arg1) {
    (引数1>1)の場合{
        return arg1 * a(arg1 - 1); // 関数名で直接呼び出す}
    それ以外 {
        1 を返します。
    }
}
コンソールログ(a(3)); // 6

発信者

caller は関数の呼び出し元を表すため、使用しないでください。この機能は標準ではありません。

関数a() {
    console.log(a.caller); // 関数 b() { a(); }
}
関数b() {
    ();
}
関数b();

評価

eval() は渡された文字列パラメータを JavaScript コードとして実行できます。

eval("var a = 1, b = 2; console.log(a+b)"); // 3

eval の使用は禁止されています。ブラウザは JavaScript を最適化するため、eval は通常の JavaScript 実行よりも遅くなります。 eval メソッドも、呼び出し元と同じ権限でコードを実行し、eval() が呼び出されたときにそのスコープが公開されるため、安全ではありません。代わりに次の関数を使用する必要があります:

var a = 新しい関数("a", "b", "console.log(a+b)")
(1,2); // 3

以上がネイティブJSで禁止すべき記述方法の詳しい内容です。ネイティブJSで禁止すべき記述方法についての詳細は、123WORDPRESS.COM内の他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • Node.js でメモリ効率の高いアプリケーションを作成する方法
  • js 正規表現リテラルと新しい RegExp の実行効率について簡単に説明します
  • JavaScript はコードの実行効率をチェックし、console.time() と console.timeEnd() の使用状況を確認します。
  • JavaScript の読み込みと実行の効率を向上させる方法
  • JavaScript で for ループを書くいくつかの方法とその効率のまとめ
  • JavaScript配列の重複排除のためのいくつかの方法の効率テスト
  • js配列内の重複項目を効率的に削除する方法
  • JavaScript の for ループの効率性の問題とそれに関連する最適化について詳細に調査します。
  • JavaScript が配列かどうかを判断する 3 つの方法とその効率の比較

<<:  mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

>>:  Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明

推薦する

正の整数かどうかを判断するMYSQLカスタム関数の例コード

関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...

Linuxパフォーマンス監視コマンドの簡単な紹介

システムでさまざまな IO ボトルネック、メモリ使用量の増加、CPU 使用率の増加などの問題が発生し...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

ウェブページでmp3またはフラッシュプレーヤーコードを再生する

コードをコピーコードは次のとおりです。 <オブジェクト id="player1&qu...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

Linux ssh サーバーの構成コード例

LinuxホストにSSHサーバーをインストールするには、次のターミナルコマンドを使用します: sud...

mysql 5.7.5 m15 winx64.zip インストール チュートリアル

win7 64 ビットで mysql-5.7.5-m15-winx64 をインストールして構成する方...

CSSで半透明の背景色を実現する2つの方法について簡単に説明します。

ページをレイアウトする際、ユーザーに異なる視覚効果を与えるために、div の背景色を半透明の状態に設...

ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

データを整理するためのリストWeb ページの表示を制御する多数の HTML タグを学習した後、読者は...

docker ストレージを使用して Exit を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策

1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...

MySQL 学習チュートリアル クラスター化インデックス

クラスタリングは、実際には InnoDB データベース エンジンに関連しています。したがって、インデ...

パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法

ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...

Reactフックの長所と短所

目次序文アドバンテージ:欠点: 1. レスポンシブな使用効果2. ステータスが同期されていないRea...

CSS の vertical-align プロパティとベースラインの問題に関する深い理解

vertical-align属性は、主にインライン要素の配置を変更するために使用されます。インライン...

jsを使用して中国語からピンインへの変換の完全な手順を実行します

jsを使用して、中国語をピンインに変換するパッケージを作成しました。倉庫のアドレスはpinyin-p...