ネイティブ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 * 詳細な説明

推薦する

Docker のインストールと構成コマンドのコード例

Dockerのインストール依存パッケージをインストールする sudo yum install -y ...

Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)

静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

Linux プラットフォームの MySQL でリモート ログインを有効にする

開発中、MySQL へのリモートアクセスでよく問題に遭遇します。そのたびに検索する必要があり、面倒に...

MySQLでスケジュールされたタスクを設定する方法の分析

この記事では、例を使用して、MySQL でスケジュールされたタスクを設定する方法について説明します。...

Django 2.2 を MySQL データベースに接続する方法

1. プロジェクトの実行時に報告されるエラー情報は次のとおりです。 ファイル "/home...

Linux の MySQL でリモート接続を承認する方法

注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

Vue.js $refs 使用例の説明

プロパティやイベントがあるにもかかわらず、JavaScript で子コンポーネントに直接アクセスする...

Linux テキスト検索コマンド find の詳細な使用方法

find コマンドは主にディレクトリやファイルを検索するために使用され、一致のために複数のパラメータ...

Centos7でのパーティションのフォーマットとマウントの実装

Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...

Docker クロスホストネットワークの実装 (手動)

1. Macvlan の紹介Macvlan が登場する前は、イーサネット カードに複数の IP ア...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

MySQLデュアルマスター(マスターマスター)アーキテクチャ構成ソリューション

企業では、データベースの高可用性は常に最優先事項です。多くの中小企業は、MySQL マスター スレー...

MySQLパスワードを忘れた場合のいくつかの解決策

解決策1完全にアンインストールしてすべてのデータを削除します。まず、MySQLに関連するすべてのプロ...