Javascript 严格模式

JavaScript 严格模式(strict mode)即在严格的条件下运行。它修复了部分语言上的不足,提供更强的错误检查,并增强安全性。

进入严格模式

1、方法中进入

function fn() {
    "use strict" 
    console.log('干一些事情')
}
fn()

2、整个脚本使用严格模式

<script type="text/javascript">
    "use strict";
    console.log('做一些事情')
</script>

严格模式下的注意事项

1、变量名不能使用 "arguments" 字符串

"use strict";
var arguments = '2' // 报错 Uncaught SyntaxError: Unexpected eval or arguments in strict mode

2、不允许使用八进制

"use strict";
var num = 010   // 报错 Uncaught SyntaxError: Octal literals are not allowed in strict mode.

3、不允许变量重名

"use strict";
function sum(a,a) { // 报错 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
    return a+a
}
console.log(sum(2,3))

4、不允许未声明的变量被赋值

"use strict";
a = 5   // 报错 Uncaught ReferenceError: a is not defined

5、不允许删除变量或对象

"use strict";
var a = 5
delete a
console.log(a)  // 报错 Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.

6、不允许删除函数

"use strict";
function add(a,b) {
    return a+b
}
delete add  // 报错 Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
console.log(add(2,4))

7、不允许使用转义字符

"use strict";
var x = \010;   // 报错 Uncaught SyntaxError: Invalid or unexpected token

8、不允许对只读属性赋值

"use strict";
var obj = {}
Object.defineProperty(obj,'name',{
    value: '张三',
    writable: false
})
obj.name = '李四'   // 报错 Uncaught TypeError: Cannot assign to read only property 'name' of object '#<Object>'

9、不允许对一个使用getter方法读取的属性进行赋值

"use strict";
var obj = { get x() { return 100 } };
obj.x = 66; // Uncaught TypeError: Cannot set property x of #<Object> which has only a getter

10、变量名不能使用 "eval" 字符串

"use strict";
var eval = '哈喽'   // 报错 Uncaught SyntaxError: Unexpected eval or arguments in strict mode

11、不允许删除一个不允许删除的属性

"use strict";
delete Array.prototype  // 报错 Uncaught TypeError: Cannot delete property 'prototype' of function Array() { [native code] }

12、由于一些安全原因,在作用域 eval() 创建的变量不能被调用

"use strict";
eval("var a = 2");
alert(a);   // 报错 Uncaught ReferenceError: a is not defined

13、严格模式下,arguments对象在使用中是不可以进行修改的,修改arguments对象不会影响到实际的函数参数

'use strict'
function add2(a, b) {

    arguments[0] = 50
    arguments[1] = 100
    console.log(a + b)    // 8
}
add2(3, 5)

14、禁止this关键字指向全局对象

function f() {
    return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false

function f() {
    "use strict";
    return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。


function fn(name) {
    'use strict';
    this.name = name
}
fn('张三')
// 报错 Uncaught TypeError: Cannot set property 'name' of undefined
// 如果函数内使用了this,则在使用函数的时候必须new,否则this没有被初始化

15、禁用with

"use strict";
var obj = {
    a: 1,
    b: 2,
    c: 3
}
with (obj) {
    a = 100;
    b = 101;
    c = 102
}
console.log(obj)
// 报错 Uncaught SyntaxError: Strict mode code may not include a with statement

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值