004-js严格模式

声明位置

只能在脚本或者script标签的开头或者在函数的开头 添加"use strict"; 来声明严格模式。

在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行)。

在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行)。

"use strict";
x = 3.14;       // 这会引发错误,因为 x 尚未声明

"use strict";
myFunction();

function myFunction() {
     y = 3.14;   // 这会引发错误,因为 y 尚未声明
}

x = 3.14;       // 这不会引发错误
myFunction();

function  myFunction() {
	"use strict";
	 y = 3.14;   // 这会引发错误
}

严格模式优点

  • 严格模式使我们更容易编写“安全的” JavaScript。
  • 严格模式把之前可接受的“坏语法”转变为真实的错误。

举例来说,在普通的 JavaScript 中,错打变量名会创建新的全局变量。在严格模式中,此举将抛出错误,这样就不可能意外创建全局变量。

  • 在普通 JavaScript 中,如果向不可写属性赋值,开发者不会得到任何错误反馈。

在严格模式中,向不可写的、只能读取的、不存在的属性赋值,或者向不存在的变量或对象赋值,将抛出错误。

严格模式要求

  • 在不声明变量的情况下使用变量,是不允许的

  • 删除变量(或对象)是不允许的:

    “use strict”;
    var x = 3.14;
    delete x; // 这将引发错误

  • 删除函数是不允许的:

    “use strict”;
    function x(p1, p2) {};
    delete x; // 这将引发错误

  • 重复参数名是不允许的:

    “use strict”;
    function x(p1, p1) {}; // 这将引发错误

  • 八进制数值文本是不允许的:

    “use strict”;
    var x = 010; // 这将引发错误

  • 转义字符是不允许的:

    “use strict”;
    var x = \010; // 这将引发错误

  • 写入只读属性是不允许的:

    “use strict”;
    var obj = {};
    Object.defineProperty(obj, “x”, {value:0, writable:false});

    obj.x = 3.14; // 这将引发错误

  • 写入只能获取的属性是不允许的:

    “use strict”;
    var obj = {get x() {return 0} };

    obj.x = 3.14; // 这将引发错误

  • 删除不可删除的属性是不允许的:

    “use strict”;
    delete Object.prototype; // 这将引发错误

  • 字符串 “eval” 不可用作变量:

    “use strict”;
    var eval = 3.14; // 这将引发错误

  • 字符串 “arguments” 不可用作变量:

    “use strict”;
    var arguments = 3.14; // 这将引发错误

  • with 语句是不允许的:

    “use strict”;
    with (Math){x = cos(2)}; // 这将引发错误

  • 出于安全考虑,不允许 eval() 在其被调用的作用域中创建变量:

    “use strict”;
    eval (“var x = 2”);
    alert (x); // 这将引发错误

  • 在类似 f() 的函数调用中,this 的值是全局对象。在严格模式中,现在它成为了 undefined。

  • 严格模式中不允许使用为未来预留的关键词。它们是:

    implements
    interface
    let
    package
    private
    protected
    public
    static
    yield

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值