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

推薦する

ffmpeg 中国語パラメータの説明と使用例

1. ffmpeg がビデオ ファイルをプッシュする場合、オーディオとビデオのエンコード形式は H2...

VUE+CanvasはシンプルなGobangゲームの全プロセスを実現します

序文レイアウトの点では、Gobang はランダムな動きを目的とするゲームよりも実装がはるかに簡単で、...

7つの基本的なXHTMLコーディングルールの概要

1. すべてのタグには対応する終了タグが必要です以前の HTML では、<p> や &l...

vue+tsは要素のマウスドラッグの効果を実現します

この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共...

jQuery の CSS スタイル属性 css() と width() の完全ガイド

目次1. css() の基本的な使用法: 1.1 CSSプロパティを取得する1.2 CSSプロパティ...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

LinuxシステムでFuserコマンドを使用する方法

Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...

Vueオプションの詳細な説明

目次1. オプションとは何ですか? 2. 含まれる属性3. エントリー属性エルデータ方法コンポーネン...

Linux 上でプロジェクトをリリースするために Tomcat を展開するプロセスにおけるさまざまな問題と解決策

プロジェクトをプロジェクトサイトのテスト環境にデプロイするJDK1.8トムキャット8.5 Maven...

SQL インジェクションの詳細

1. SQL インジェクションとは何ですか? SQL インジェクションは、入力パラメータに SQL ...

iframeをカプセル化するvueコンポーネントを開発する

目次1. コンポーネントの紹介2. コンポーネントの内部構造とロジック1. コード組織構造2. マッ...

MySQL SQL ステートメント分析とクエリ最適化の詳細な説明

パフォーマンスの問題のあるSQL文を取得する方法1. ユーザーからのフィードバックを通じてパフォーマ...

Vue のプラグインとコンポーネントの違いと使い方のまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです操作は実際にはそれほど難しくありません。バックアップ操作を実...

Linux コマンドラインで他のユーザーと通信する方法

Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...