ネイティブ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データベースで外部キー制約を使用する必要があるかどうかの詳細な説明

1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...

JavaScript の find() メソッドと filter() メソッドの違いのまとめ

目次序文JavaScript find() メソッドJavaScript filter() メソッド...

XHTML の一般的な構造タグ

構造本文、見出し、HTML、タイトル文章abbr、頭字語、アドレス、引用ブロック、br、引用、コード...

Tomcat マルチポートドメイン名アクセスと gzip 圧縮方式を有効にする構成

1. デフォルトのポート8080に加えて、ドメイン名のアクセスとserver.xmlのオープンにポー...

Bash で山括弧を使用するその他の方法

序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...

Vue3 での Teleport の使用に関する詳細な説明

目次テレポートの目的テレポートの仕組みこの記事では、以下の内容を取り上げます。テレポートの目的テレポ...

JS クロスドメイン ソリューション React 構成 リバース プロキシ

クロスドメインソリューションjsonp (get をシミュレート) CORS (クロスオリジンリソー...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

Element+vueを使用して開始時間と終了時間の制限を実装する

この記事の例では、Element+vueを使用して開始と終了の時間制限を実装するための具体的なコード...

ウェブレッスンプラン、初心者向けレッスンプラン

指導トピックウェブページ適用グレード高校2年生授業時間1 クラス教科書分析焦点: 静的および動的ウェ...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

Vueはビデオ再生を実装するためにビデオタグを使用します

この記事では、ビデオタグを使用してビデオ再生を実装するVueの具体的なコードを参考までに共有します。...

Vue における $router と $route の違いの詳細な説明

通常、vue プロジェクトではルーティングを使用します。vue-router は vue.js の公...