Maison  >  Article  >  interface Web  >  Apprentissage avancé de la syntaxe JavaScript en mode strict

Apprentissage avancé de la syntaxe JavaScript en mode strict

WBOY
WBOYavant
2022-05-24 13:45:411670parcourir

Cet article vous apporte des connaissances pertinentes sur javascript, qui présente principalement des problèmes liés au mode strict, facile à comprendre. Il s'agit d'un mode JavaScript restrictif, qui rend le code implicite. Sortons du "mode paresseux". jetez un œil ci-dessous. J’espère que cela sera utile à tout le monde.

Apprentissage avancé de la syntaxe JavaScript en mode strict

[Recommandations associées : tutoriel vidéo javascript, front-end web]

1 Comprendre le mode strict

  • Dans la norme ECMAScript5, JavaScript a proposé le concept de mode strict :

    • . mode strict Il est facile de comprendre qu'il s'agit d'un mode JavaScript restrictif, qui fait implicitement sortir le code du "mode paresseux".

    • Les navigateurs prenant en charge le mode strict détecteront et exécuteront le code de manière plus stricte lors de la détection du mode strict dans le code.

  • Le mode strict impose certaines restrictions sur la sémantique JavaScript normale :

    • Le mode strict élimine certaines des erreurs silencieuses d'origine en générant des erreurs.

    • Le mode strict permet au moteur JS d'effectuer davantage d'optimisations lors de l'exécution du code (pas besoin de gérer une syntaxe particulière).

    • Le mode strict désactive certaines syntaxes qui pourraient être définies dans les futures versions d'ECMAScript.

2. Activez le mode strict

Alors, comment activer le mode strict ? Le mode strict prend en charge la migration granulaire :

  • peut prendre en charge l'activation du mode strict dans les fichiers js ;
  • prend également en charge l'activation du mode strict pour une certaine fonction

3. Restrictions du mode strict

JavaScript est conçu pour les développeurs novices. plus facile à démarrer, donc parfois si vous achetez une syntaxe incorrecte, ne pensez pas qu'elle puisse être analysée normalement
Cependant, cette méthode peut entraîner des risques de sécurité
En mode strict, ce type de transaction sera considéré comme une erreur ; qu'il peut être rapidement découvert et corrigé ;
Résumé quelques limitations courantes :

1. Les variables globales ne peuvent pas être créées accidentellement

Il existe deux manières de créer accidentellement des variables globales :

  • Globalement, n'utilisez pas la clé directement. déclarer des variables globales
  • N'utilisez pas de mots-clés pour déclarer des variables à l'intérieur de la fonction. Les fonctions sont promues en variables globales par défaut
    L'exemple de code est le suivant :
'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. signaler une exception d'erreur

L'exemple de code est le suivant :

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

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

3. Essayer de supprimer des attributs non supprimables en mode strict

En mode strict, vous ne pouvez pas utiliser l'opérateur de désélection sur les variables.

(1). Utilisez le mot-clé delete pour les variables

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

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

(2). Utilisez le mot-clé delete pour les tableaux et les attributs de méthode

Utilisez le mot-clé delete pour les tableaux et les attributs de méthode en mode strict, l'effet reste inchangé.

// 开启严格模式
'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. Le mode strict ne permet pas aux paramètres de fonction d'avoir le même nom

L'exemple de code est le suivant :

'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. La syntaxe octale de 0 n'est pas autorisée

L'exemple de code est le suivant. suit :

// 不允许使用原先的八进制格式
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. En mode strict, l'utilisation de with

n'est pas autorisée. L'exemple de code est le suivant :

'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. couche supérieure

L'exemple de code est le suivant :

var jsString = "var message = 'hello world';console.log(message)"
eval(jsString) // 输出  hello world
console.log(message) // 报错信息为:ReferenceError: message is not defined

开启严格模式 eval函数不会向上引用变量 所以全局作用域就没有message这个变量所以会报错

8 En mode strict, cette liaison ne sera pas convertie en objet par défaut

L'exemple de code est le suivant :

'use strict'
// 在严格模式下,自执行函数(默认绑定)会指向undefined  ,非严格模式下会指向window
function foo () {
    console.log(this)
}
foo() // undefined

[Recommandations associées : tutoriel vidéo javascript, front-end web]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer