Pembelajaran sintaks lanjutan JavaScript dalam mod ketat

WBOY
Lepaskan: 2022-05-24 13:45:41
ke hadapan
1755 orang telah melayarinya

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.

Pembelajaran sintaks lanjutan JavaScript dalam mod ketat

[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]

1 mod

  • 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.

2. Hidupkan mod ketat

Jadi bagaimana untuk menghidupkan mod ketat? Mod ketat menyokong pemindahan berbutir:

  • boleh menyokong menghidupkan mod ketat dalam fail js;
  • juga menyokong menghidupkan mod ketat untuk fungsi tertentu; >3. Sekatan mod yang ketat
JavaScript direka untuk lebih mudah digunakan oleh pembangun pemula, jadi kadangkala ia mempunyai sintaks yang salah, jangan fikir ia boleh dihuraikan secara normal

Tetapi kaedah ini mungkin memberikannya membawa risiko keselamatan;

Dalam mod ketat, urus niaga jenis ini akan dianggap sebagai ralat supaya ia boleh ditemui dengan cepat dan diperbetulkan

Merumuskan beberapa had biasa:


1. Pembolehubah global tidak boleh dibuat secara tidak sengaja

Terdapat dua cara untuk mencipta pembolehubah global secara tidak sengaja:

Istiharkan pembolehubah global secara global secara langsung tanpa menggunakan kata kunci

    Jika anda jangan gunakan kata kunci untuk mengisytiharkan pembolehubah di dalam fungsi, fungsi tersebut akan dinaikkan pangkat kepada pembolehubah global secara lalai
  • Kod sampel adalah seperti berikut:

2. . Mod ketat akan menyebabkan Operasi tugasan yang gagal melaporkan pengecualian ralat secara senyap
'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
Salin selepas log masuk

Kod sampel adalah seperti berikut:

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

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

Dalam mod ketat, operator nyahpilih tidak boleh digunakan pada pembolehubah.

(1) Gunakan kata kunci padam untuk pembolehubah

(2). kata kunci padam pada atribut kaedah mempunyai kesan yang sama.

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

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

4. Mod ketat tidak membenarkan parameter fungsi mempunyai nama yang sama

// 开启严格模式
'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
Salin selepas log masuk
Kod sampel adalah seperti berikut:

5 .Sintaks oktal 0 tidak dibenarkan

'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
Salin selepas log masuk
Kod sampel adalah seperti berikut:

6 Dalam mod ketat, dengan

Kod sampel adalah seperti berikut:
// 不允许使用原先的八进制格式
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
Salin selepas log masuk

7 Dalam mod ketat, eval tidak lagi merujuk kepada pembolehubah untuk lapisan atas

Kod sampel adalah seperti berikut:
'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
Salin selepas log masuk

var jsString = "var message = 'hello world';console.log(message)"
eval(jsString) // 输出  hello world
console.log(message) // 报错信息为:ReferenceError: message is not defined
Salin selepas log masuk
8 Dalam mod ketat, pengikatan ini tidak akan berlaku ditukar kepada objek secara lalai

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

Kod sampel adalah seperti berikut:

[Cadangan berkaitan: tutorial video javascript

,

depan web -akhir

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

Atas ialah kandungan terperinci Pembelajaran sintaks lanjutan JavaScript dalam mod ketat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan