ホームページ  >  記事  >  ウェブフロントエンド  >  厳密モードでの JavaScript の高度な構文学習

厳密モードでの JavaScript の高度な構文学習

WBOY
WBOY転載
2022-05-24 13:45:411670ブラウズ

この記事では、javascript に関する関連知識を提供します。主にストリクト モードに関する関連問題を紹介します。ストリクト モードは理解しやすく、制限的な JavaScript モードです。これにより、コードが暗黙的に "怠惰モード」について見てみましょう。皆さんの参考になれば幸いです。

厳密モードでの JavaScript の高度な構文学習

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

1. 厳密な理解mode

  • ECMAScript5 標準では、JavaScript が strict モードの概念を提案しました:

    • Strict モードは理解しやすく、制限的な JavaScript モードです。したがって、コードは暗黙的に「遅延モード」から抜け出します。

    • 厳密モー​​ドをサポートするブラウザは、コード内で厳密モードを検出すると、より厳密な方法でコードを検出して実行します。

  • Strict モードは、通常の JavaScript セマンティクスにいくつかの制限を課します。

    • Strict モードは、 エラー ## を介してスローします。 # 元の サイレント エラー の一部を排除します。

    • Strict モードでは、コードの実行時に JS エンジンがより多くの最適化を実行できます (特別な構文を処理する必要はありません)。

    • Strict モードでは、ECMAScript の将来のバージョンで定義される可能性のある一部の構文が無効になります。

  • #2. ストリクト モードをオンにする

それでは、ストリクト モードをオンにするにはどうすればよいでしょうか?厳密モードは詳細な移行をサポートします:

は js ファイルで厳密モードをオンにすることをサポートできます;
  • は特定の関数の厳密モードをオンにすることもサポートします;
  • 3. 厳密なモードの制限

JavaScript は初心者の開発者が簡単に始められるように設計されているため、間違った構文を購入した場合、正常に解析できないと考えられる場合があります;

しかし、この方法はセキュリティ上のリスクをもたらす可能性があります;

厳密モードでは、この種のトランザクションはエラーとして扱われるため、すぐに発見して修正できます;
一般的な制限事項をいくつかまとめます:

1. グローバル変数を誤って作成できない

グローバル変数を誤って作成するには 2 つの方法があります:

キーワードを使用せずにグローバル変数を直接グローバルに宣言する
  • 関数内で変数を宣言するためにキーワードを使用しないでください。関数はデフォルトでグローバル変数に昇格されます。
  • サンプル コードは次のとおりです:

  • 'use strict'
    // 禁止意外创建全局变量
    message = '意外创建全局变量'
    console.log(message) // 报错信息为:Uncaught ReferenceError: message is not defined
    
    function foo () {
        age = 20
        console.log(age)
    }
    foo() // ReferenceError: age is not defined
2. 厳密モードの場合サイレントエラーが発生します 代入操作によりエラー例外が報告されます

サンプルコードは次のとおりです:

//开启严格模式,将问题直接转化为报错
'use strict'
const v = 100;//(定义常量)
v = 1.14;//重新赋值(为变量)

console.log(v); // Uncaught TypeError: Assignment to constant variable.

3. 厳密モードで削除不可能な属性を削除しようとしています

厳密モードでは、変数に対して選択解除演算子を使用できません。

(1). 変数には delete キーワードを使用します

  // 开启严格模式
'use strict'

var v = 100;
delete v;//非严格模式下:此处为静默失败,既没有报错也没有删除变量v
console.log(v);//100
//开启严格模式后,改为报错Delete of an unqualified identifier in strict mode.

(2). 配列およびメソッド属性には delete キーワードを使用します

厳密モー​​ドでは、delete キーワードを使用します配列およびペアの場合 メソッド属性に delete キーワードを使用しても、効果は変わりません。

// 开启严格模式
'use strict'

// 1、严格模式下删除数组内容
var arr = [1,2,3,4]
delete arr[0];
console.log(arr);//[ <1 empty item>, 2, 3, 4 ]

// 2、严格模式下delete函数的属性
var obj  =  {
    name : '猪猪侠 '
}
delete obj.name;
console.log(obj.name)//undefined

4. 厳密モードでは、関数パラメータに同じ名前を付けることはできません

サンプル コードは次のとおりです:

'use strict'
// 不允许函数有相同的参数名称
function foo2 (x, y, x) {
    console.log(x, y, x)
}
foo2(10, 20, 30) // SyntaxError: Duplicate parameter name not allowed in this context

5. 0 は許可されません 8 進構文

サンプル コードは次のとおりです:

// 不允许使用原先的八进制格式
var num1 = 0123
var num2 = 0o123 // 可以写成这种格式 八进制
var num3 = 0x123 // 可以写成这种格式 十六进制
var num4 = 0b100 // 可以写成这种格式 二进制

console.log(num1) // SyntaxError: Octal literals are not allowed in strict mode.
console.log(num2, num3, num4) // 83 291 4

6. strict モードでは、with

# を使用します。 ## は許可されません。サンプル コードは次のとおりです:
'use strict'
var message = 'Hello World';

var obj = { name: 'jam', age: 20 }
// with语句可以形成自己的作用域,在with语句中打印age时,会输出obj对象中的age属性,但在with语句中打印不存在的属性message时,会向外层的作用域一层一层去查找
function foo () {
    with (obj) {
        console.log(age) 
        console.log(message) 
    }
    console.log(message)
}
foo() // SyntaxError: Strict mode code may not include a with statement

7. strict モードでは、eval は上位層の変数を参照しなくなりました

サンプルコードは次のとおりです:
var jsString = "var message = 'hello world';console.log(message)"
eval(jsString) // 输出  hello world
console.log(message) // 报错信息为:ReferenceError: message is not defined

厳密モードがオンになっている場合、eval 関数は変数を上方参照しないため、グローバル スコープにはメッセージ変数がないため、エラーが発生します。

8. 厳密モードでは、このバインディングはデフォルトでは転送されません オブジェクト

サンプル コードは次のとおりです。 ##
'use strict'
// 在严格模式下,自执行函数(默认绑定)会指向undefined  ,非严格模式下会指向window
function foo () {
    console.log(this)
}
foo() // undefined
[関連する推奨事項:

JavaScript ビデオ チュートリアル

Web フロントエンド

]

以上が厳密モードでの JavaScript の高度な構文学習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。