Artikel ini membawa anda pengetahuan yang berkaitan tentang javascript, yang terutamanya memperkenalkan isu yang berkaitan dengan mod ketat mudah difahami dan merupakan mod JavaScript yang mengehadkan Ini menjadikan kod secara tersirat daripada ". mod malas". Mari kita lihat. Saya harap ia akan membantu semua orang.
[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]
Dalam standard ECMAScript5, JavaScript mencadangkan konsep mod ketat:
Mod ketat mudah difahami dan merupakan mod JavaScript yang terhad , dengan itu menjadikan kod secara tersirat keluar daripada "mod malas".
Pelayar yang menyokong mod ketat akan mengesan dan melaksanakan kod dengan cara yang lebih ketat apabila mengesan mod ketat dalam kod.
Mod ketat mengenakan beberapa sekatan pada semantik JavaScript biasa:
Mod ketat melontar melalui Ralat untuk menghapuskan beberapa ralat senyap asal.
Mod ketat membolehkan enjin JS melakukan lebih banyak pengoptimuman apabila melaksanakan kod (tanpa perlu memproses beberapa sintaks khas).
Mod ketat melumpuhkan beberapa sintaks yang mungkin ditakrifkan dalam versi ECMAScript akan datang.
Jadi bagaimana untuk menghidupkan mod ketat? Mod ketat menyokong pemindahan berbutir:
Merumuskan beberapa had biasa:
1. Pembolehubah global tidak boleh dibuat secara tidak sengaja
Istiharkan pembolehubah global secara global secara langsung tanpa menggunakan kata kunci
'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
//开启严格模式,将问题直接转化为报错 'use strict' const v = 100;//(定义常量) v = 1.14;//重新赋值(为变量) console.log(v); // Uncaught TypeError: Assignment to constant variable.
// 开启严格模式 'use strict' var v = 100; delete v;//非严格模式下:此处为静默失败,既没有报错也没有删除变量v console.log(v);//100 //开启严格模式后,改为报错Delete of an unqualified identifier in strict mode.
// 开启严格模式 '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
'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
// 不允许使用原先的八进制格式 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
'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
var jsString = "var message = 'hello world';console.log(message)" eval(jsString) // 输出 hello world console.log(message) // 报错信息为:ReferenceError: message is not defined
8 Dalam mod ketat, pengikatan ini tidak akan berlaku ditukar kepada objek secara lalaiKod sampel adalah seperti berikut:
开启严格模式 eval函数不会向上引用变量 所以全局作用域就没有message这个变量所以会报错
depan web -akhir
]'use strict' // 在严格模式下,自执行函数(默认绑定)会指向undefined ,非严格模式下会指向window function foo () { console.log(this) } foo() // undefined
Atas ialah kandungan terperinci Pembelajaran sintaks lanjutan JavaScript dalam mod ketat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!