您现在的位置:爱折腾>> web>>正文内容

严格模式-Restrictions on code in strict mode


参考地址:https://msdn.microsoft.com/library/br230269.aspx

Internet Explorer 10 之前的 Internet Explorer 版本不支持严格模式。

1、使用未定义的变量,抛错: Uncaught ReferenceError: a is not defined
  1. 'use strict';
  2. a = 10;
复制代码

2、试图更改只读属性,抛错:Uncaught TypeError: Cannot delete property 'prop' of #<Object>
  1. 'use strict';
  2. var obj = Object.defineProperties({}, {
  3. prop: {
  4. value: "test",
  5. writalble: false
  6. }
  7. });
  8. delete obj.prop;
复制代码
                                
3、试图给不可扩展的对象添加属性,抛错:Uncaught TypeError: Can't add property name, object is not extensible
  1. 'use strict';
  2. var testObj = new Object();
  3. Object.preventExtensions(testObj);
  4. testObj.name = "Bob";
复制代码

4、删除变量、函数或参数,抛错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
  1. 'use strict';
  2. var testvar = 15;
  3. delete testvar;
  4. function testFunc() {};
  5. delete testFunc;
  6. function test(param){
  7.         delete param;
  8. }
复制代码
       
    删除 configurable 特性设置为 false 的属性,抛错。

5、参数名相同,抛错:Uncaught SyntaxError: Strict mode function may not have duplicate parameter names
  1. 'use strict';
  2. function a(param, param){
  3.         alert(1);
  4. }
复制代码

6、定义的变量为未来保留字,抛错:Uncaught SyntaxError: Unexpected strict mode reserved word
未来保留字:implements  interface  package  private  protected  public  static  yield
  1. 'use strict';
  2. var yield;
复制代码

7、对数值文本分配八进制值。抛错:Uncaught SyntaxError: Octal literals are not allowed in strict mode.
  1. 'use strict';
  2. var testoctal = 010;
复制代码

8、当 this 的值为 null 或 undefined 时,该值不会转换为全局对象。
  1. 'use strict';
  2. function testFunc() {
  3.         console.log(this);//严格模式下为undefined, 非严格模式下是 window
  4.     return this;
  5. }
  6. testFunc();
复制代码

9、字符串“eval”不能用作标识符(变量或函数名、参数名等)。抛错:Uncaught SyntaxError: Unexpected eval or arguments in strict mode
  1. 'use strict';
  2. var eval;
  3. function eval(){}
  4. function a(eval){}
复制代码

10、无法在语句或块中声明函数。抛错: SyntaxError: in strict mode code, functions may be declared only at top level or immediately within another
  1. 'use strict';
  2. var arr = [1, 2, 3, 4, 5];
  3. var index = null;
  4. for (index in arr) {
  5.     function myFunc() {};
  6. }
复制代码

11、如果在 eval 函数内声明变量,则不能在此函数外部使用该变量。

12、字符串“arguments”不能用作标识符(变量或函数名、参数名等)。

13、无法更改本地 arguments 对象的成员的值
  1. 'use strict';
  2. function test(name, age){
  3.         arguments[0] = 'luo';
  4.         console.log(arguments[0], name);// 'luo' "lanhan"
  5. }
  6. function test1(name, age){
  7.         age = 10;
  8.         console.log(arguments[1], age);//21 10
  9. }
  10. test('lanhan', 21);
  11. test1('lanhan', 21);
复制代码


14、不允许使用arguments.callee 和 with

相关文章