我是靠谱客的博主 积极万宝路,最近开发中收集的这篇文章主要介绍【慕课学习】《JavaScript深入浅出》——严格模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

js的严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性。
进入严格模式:

//在函数开头加上‘use strict’指令
function func(){
    'use strict';
    //code
}
//或在整个js文件最开头加上‘use strict’指令,使整个js都使用严格模式
'use strict';
function func(){
    //code
}
//注:如果浏览器不支持严格模式,‘use strict’指令会被当作普通字符串而被忽略
//实际上'use strict'之前也可以添加其他指令,但必须写在正式的js代码之前

严格模式和普通模式的区别在于:

1、严格模式不允许使用with语句

!function(){
    with({x:1}){
        console.log(x);
    }
}()
//1

!function(){
    'use strict';
    with({x:1}){
        console.log(x);
    }
}()
//SyntaxError

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

!function(){
    x=1;
    console.log(window.x);
}()
//1

!function(){
    'use strict';
    x=1;
    console.log(window.x);
}()
//ReferenceError

3、arguments参数的静态副本

!function(a){
    arguments[0]=100;
    console.log(a);
}(1)
//100
//注:若传的参数不是1,而是不传,那么结果为undefined,不会受arguments影响

!function(a){
    'use strict';
    arguments[0]=100;
    console.log(a);
}(1)
//1
//注:arguments变为静态副本,与形参a没有绑定关系,不会与a相互影响

!function(a){
    'use strict';
    arguments[0].x=100;
    console.log(a.x);
}({x:1})
//100
//注:若参数为对象,修改对象的属性,arguments与形参a还是会相互影响

4、delete参数、函数名报错

!function(a){
    console.log(delete a);
}(1)
//false

!function(a){
    'use strict';
    console.log(delete a);
}(1)
//SyntaxError

5、delete不可配置的属性报错

!function(a){
     var obj={};
     Object.defineProperty(obj,'a',{configurable:false});
    console.log(delete obj.a);
}(1)
//false

!function(a){
    'use strict';
    var obj={};
    Object.defineProperty(obj,'a',{configurable:false});
    console.log(delete obj.a);
}(1)
//TypeError

6、对象字面量重复属性报错

!function(){
    var obj={x:1,x:2};
    console.log(obj.x);
}()
//2

!function(){
    'use strict';
    var obj={x:1,x:2};
    console.log(obj.x);
}()
//SyntaxError

7、禁止八进制字面量

!function(){
    console.log(0123);
}()

!function(){
    'use strict';
    console.log(0123);
}()
//SyntaxError

8、eval、arguments变为关键字,不能作为变量、函数名

!function(){
    function eval(){};
    console.log(eval);
}()
//function eval(){}

!function(){
    'use strict';
    function eval(){};
}()
//SyntaxError

9、eval变成独立作用域

!function(){
    eval('var val=3;');
    console.log(typeof val);
}()
//number

!function(){
    'use strict';
    eval('var val=3;');
    console.log(typeof val);
}()
//undefined,在eval外不能拿到eval内声明的变量

10、其他

严格模式下,一般函数调用时(不是对象的方法调用,也不适用apply/call/bind等修改this)this指向null,而不是全局对象。
若使用apply/call,当传入null或undefined时,this将指向null或undefined,而不是全局对象。
arguments.cller,arguments.callee被禁用。

最后

以上就是积极万宝路为你收集整理的【慕课学习】《JavaScript深入浅出》——严格模式的全部内容,希望文章能够帮你解决【慕课学习】《JavaScript深入浅出》——严格模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部