javascript严格模式下有哪些不同

ECMAScript 5引入了严格模式(strict mode),严格模式即在严格的条件下进行,其中的一些不确定的行为得到处理。

严格模式

通过在脚本或函数的头部添加"use strict";表达式来声明。
支持严格模式的浏览器有ie 10+,Firefox 4+,chrome 13+,safari 5.1+,opera 12+。

使用严格模式的好处:

  • 消除语法的不合理,不严谨之处,保证代码的运行安全
  • 提高编译器效率,增加运行速度
  • 为未来新版本的js做铺垫

严格模式的限制

  1. 不允许使用未声明的变量
    对象也是一个变量。
"use strict"
x = {s1:100, s2:99}; //Uncaught ReferenceError: x is not defined
  1. 不允许对变量或函数使用delete操作符
"use strict"
var x = 1;
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
  1. 不允许变量重名
"use strict"
function fs(r1,r1) {
} //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
  1. 不允许使用八进制
"use strict"
var x = 012; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
  1. 抛弃with语句
"use strict"
var str = "hello";
with(str) {
  console.log(toUpperCase());
}
//Uncaught SyntaxError: Strict mode code may not include a with statement
  1. 不可对只读对象赋值,不可对不可配置对象使用delete操作符
"use strict"
console.log(Object.prototype);
delete Object.prototype; //Uncaught TypeError
console.log(Object.prototype); 
  1. 禁止this关键字指向全局对象
"use strict"
function fs() {
  console.log(this);
}
fs();
//undefined
  1. 不可在if内部声明函数
"use strict"
var a=0;
if(a<=2) {
  function add() {
    a++;
    return a;
  }
}
add(); //Uncaught ReferenceError: add is not defined
console.log(add()); //非严格模式下返回2

你可能感兴趣的:(javascript严格模式下有哪些不同)