概述
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深入浅出》——严格模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复