javascript的严格模式-JavaScript 严格模式

2024-05-24 0 5,788 百度已收录

1.使用严格模式作用

1.消除了Javascript句型的一些不合理和不精确方面,缓解了一些奇怪行为

2、消除代码运行的一些不安全方面,保证代码运行的安全;

3、提高编译效率降低运行速度

4.为未来Javascript新版本铺平道路。

2.使用严格模式

进入“严格模式”的标志是下面这句话:

  "use strict";

较旧的浏览器会将其视为普通字符串并忽略它。

使用全局模式时的注意事项

1.严格模式下javascript的严格模式,必须显式声明全局变量

2、Javascript语言的一个特点是它允许动态绑定”,即各个对象的各个属性技术属于哪个对象,不是在编译时确定的,而是在运行时确定的。 严格模式对动态绑定有一些限制。 在某些情况下,只允许静态绑定。 也就是说,对象属性和技能属于哪些对象,是在编译阶段就确定的。 这将有助于提高编译效率,使代码更易于阅读javascript的严格模式,并减少意外情况。

具体涉及以下几个方面:

(1) 严禁与句子连用

由于with语句在编译时无法确定该属性属于哪个对象。

 "use strict";
  var v = 1;
  with (o){ // 语法错误 
    v = 2;
  }

(2) 创建eval作用域

在正常模式下,Javascript语言有两个变量作用域:全局作用域和函数作用域。 严格模式创建第三个作用域:eval 作用域。

在普通模式下,eval语句的作用域取决于它是在全局作用域还是在函数作用域。 严格模式下,eval语句本身就是一个作用域,不能再生成全局变量。 它生成的变量只能在eval内部使用。

  "use strict";
  var x = 2;
  console.info(eval("var x = 5; x")); // 5
  console.info(x); // 2

改进安全模式

(1)严格禁止this关键指向全局对象

 function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

因此,如果使用构造函数时忘记添加new,this将不再指向全局对象,而是会报错。

(2)严禁遍历函数内部的调用

 function f1(){
    "use strict";
    f1.caller; // 报错
    f1.arguments; // 报错
  }
  f1();

严禁删除变量

在严格模式下删除变量是很困难的。 仅可删除可配置设置为 true 的对象属性。

  "use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功

显示错误

在普通模式下,如果对象的只读属性被正式参数化,则不会报告任何错误,只会默默失败。 严格模式下会报错。

 "use strict";
  var o = {};
  Object.defineProperty(o, "v", { value: 1, writable: false });
  o.v = 2; // 报错

严格模式下,如果使用形参通过getter方法读取属性,会报错。

 "use strict";
  var o = {
    get v() { return 1; }
  };
  o.v = 2; // 报错

javascript的严格模式-JavaScript 严格模式

在严格模式下,向严格禁止扩展的对象添加新属性将导致错误。

  "use strict";
  var o = {};
  Object.preventExtensions(o);
  o.v = 1; // 报错

在严格模式下,删除无法删除的属性会导致错误。

  "use strict";
  delete Object.prototype; // 报错

4.6 重名错误

严格模式有一些新的语法错误。

(1) 对象不能有重名的属性。

在普通模式下,如果一个对象有多个同名属性,最后一个形参的属性会覆盖后面的值。 在严格模式下,这是一个语法错误。

  "use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误

(2) 函数不能有重名的参数。

  "use strict";
  function f(a, a, b) { // 语法错误
    return ;
  }

4.7 严禁使用八补码表示

  "use strict";
  var n = 0100; // 语法错误

4.8 参数对象的限制

Arguments是函数的参数对象,严格模式限制了它的使用。

(1) 不允许使用实参形式参数

"use strict";
  arguments++; // 语法错误
  var obj = { set p(arguments) { } }; // 语法错误
  try { } catch (arguments) { } // 语法错误
  function arguments() { } // 语法错误
  var f = new Function("arguments", "'use strict'; return 17;"); // 语法错误

(2)arguments 不再跟踪参数变化

 function f(a) {
    a = 2;
    return [a, arguments[0]];
  }
  f(1); // 正常模式为[2,2]
  function f(a) {
    "use strict";
    a = 2;
    return [a, arguments[0]];
  }
  f(1); // 严格模式为[2,1]
(3)禁止使用arguments.callee意味着,你无法在匿名函数内部调用自身了。
  "use strict";
  var f = function() { return arguments.callee; };
  f(); // 报错

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript的严格模式-JavaScript 严格模式 https://www.wkzy.net/game/202257.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务