千家信息网

javascript严格模式的不同点有哪些

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下javascript严格模式的不同点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!不同点:1、禁止使用with语句;2、禁止this关键字指向全局对象;3、禁
千家信息网最后更新 2026年11月03日javascript严格模式的不同点有哪些

小编给大家分享一下javascript严格模式的不同点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

不同点:1、禁止使用with语句;2、禁止this关键字指向全局对象;3、禁止在函数内部遍历调用栈;4、对象不能有重名属性、函数不能有重名参数;5、禁止八进制表示法;6、不允许对arguments赋值;7、不允许在非函数的代码块内声明函数。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

javascript严格模式的不同

严格模式对Javascript的语法和行为,都做了一些改变。

1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";  v = 1; // 报错,v未声明  for(i = 0; i < 2; i++) { // 报错,i未声明  }

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

2 静态绑定

Javascript语言的一个特点,就是允许"动态绑定",即某些属性和方法到底属于哪一个对象,不是在编译时确定的,而是在运行时(runtime)确定的。

严格模式对动态绑定做了一些限制。某些情况下,只允许静态绑定。也就是说,属性和方法到底归属哪个对象,在编译阶段就确定。这样做有利于编译效率的提高,也使得代码更容易阅读,更少出现意外。

具体来说,涉及以下几个方面。

(1)禁止使用with语句

因为with语句无法在编译时就确定,属性到底归属哪个对象。

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

(2)创设eval作用域

正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。

正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

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

3 增强的安全措施

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

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

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

  function f(){    "use strict";    this.a = 1;  };  f();// 报错,this未定义

(2)禁止在函数内部遍历调用栈

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

4 禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

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

5 显式报错

正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。

  "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; // 报错

严格模式下,对禁止扩展的对象添加新属性,会报错。

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

严格模式下,删除一个不可删除的属性,会报错。

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

6 重名错误

严格模式新增了一些语法错误。

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

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

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

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

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

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

7 禁止八进制表示法

正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。

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

8 arguments对象的限制

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

(1)不允许对arguments赋值

  "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(); // 报错

9 函数必须声明在顶层

将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。

  "use strict";  if (true) {    function f() { } // 语法错误  }  for (var i = 0; i < 5; i++) {    function f2() { } // 语法错误  }

看完了这篇文章,相信你对"javascript严格模式的不同点有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

模式 函数 语法 错误 对象 作用 属性 全局 变量 参数 语句 不同 指向 编译 不同点 代码 八进制 就是 方法 表示法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网加科技 深圳九邦互联网科技有限公司 互联网科技公司华为 盈实互联网科技 互联网科技开发公司 互联网科技媒体 智慧科技互联网 善班互联网科技有限公司 互联网科技大会 四个字互联网科技公司取名 重庆威客帮互联网科技 互联网校园科技培训 搜狐科技互联网 洛阳昕诺飞互联网科技有限公司 互联网公司黑科技创始人 图游互联网科技 广州有谷有贝互联网科技有限公司 广州燕处互联网科技有限公司 容联科技互联网电商 上海万顺科技互联网有限公司招聘 互联网科技工作委员会副主任毛军 腾讯阿里互联网科技 互联网与未来科技 广西互联网科技公司 宇信科技在杭州互联网排第几 有人说阿里系是互联网科技企业 南京一网一红互联网科技有限公司 江苏互联网智能科技产品出厂价 数字科技和互联网金融哪个好 互联网科技创新方面的资料
0