开发中的严格模式

作者: LIT乐言 | 来源:发表于2019-07-20 17:55 被阅读0次

js中有严格模式和非严格模式两种运行环境

  • 在开发中,有非严格模式和严格模式2种开发模式

  • 在严格模式下,会做更加严格的语法检查,以前在非严格模式下可以使用的一些语句,在严格模式下直接报错或者抛出异常

  • 开启严格模式 : "use strict";

  • 如果浏览器支持严格模式就会开启严格模式,如果不支持,'use strict'作为一段字符串忽略处理

实现严格模式:只需要在脚本代码中添加上上述关键字即可。 关键字具体说明

  • (1) 注意区分大小写,必须全部都是小写的
  • (2) 注意空格,整个字符串总共10个字符
  • (3) 单引号和双引号无所谓,但是需要有双引号
  • (4) 必须写在作用域的最顶部,注意其位置
  • (5) 可以加分号,也可以不加,但是必须是一个字符串

      //"use strict";   //正确写法

      //"use strict"    //正确写法     分号可以省略

       //'use strict';   //正确写法     可以使用单引号
      //"use  strict";    //错误写法   必须是10个字符
      //"use Strict";     //错误写法   所有的字符都必须小写

**作用范围**

① 函数的顶部(只对当前的函数有效)

② script标签的顶部,只对当前的标签有效,对页面中其他的script无效

代码示例


    //位置01       对func01和func02都有效
    //"use strict";

    function func01() {
        //位置02   对func01有效,对func02无效
        //"use strict";
        a = 10;
        console.log(a);
    }

    function func02() {
        //位置03 对func02有效,但对func01无效
       //"use strict";
        b = 20;
        console.log(b);
    }

    func01();
    func02();


# 严格模式使用注意

**常见的几种**

* ① 所有的变量必须使用var 关键字声明
* ② 不能使用delete关键字删除全局变量 ,以前默认删除失败,严格模式下直接报错
* ③ 在对象中不允许有同名的属性
* ④ 函数的参数必须唯一(不能出现同名的参数)
* ⑤ arguments对象的行为不同,在非严格模式下修改形参的值会反映到arguments中,而严格模式下则相对独立
* ⑥ 禁用了argument.callee和caller函数,他们一个引用函数本身,一个引用调用函数
* ⑦ 不能在if语句中声明函数
* ⑧ 禁止使用eval和arguments作为标识符
* ⑨ 修正this的值,在严格模式下,函数this的值始终是指定的值,无论指定的是什么值。
* 10 禁用了with语句
* 11 去掉了JavaScript中的八进制字面量(以0开头的八进制字面量是无效的语法)

① 所有的变量都必须使用var关键字声明

 a = 10;             //错误的演示
 console.log(10);

② 不能使用delete关键字删除全局变量

//在非严格模式下,删除失败(静默失败)   严格模式下直接报错
var a = 10;
delete a;
console.log(a);

③ 在对象中不允许有同名的属性

//在非严格模式下,会使用后面的属性赋值作为最终值,在严格模式下则直接报错
var obj = {
    name:"张三",
    name:"李四"
}

console.log(obj);

④ 函数的参数必须唯一(不能出现同名的参数)

//在非严格模式下,如果函数在定义的时候,使用了多个同名的参数,则在函数内部形参的实际值为最后一个传入的实参值
//在严格模式下,直接报错
//    function func(a,a,a) {
//        console.log(a);
//        console.log(arguments);
//    }

function func(a,b,c) {
    console.log(a);
    console.log(arguments);
}
func(1,2,3);

arguments对象的行为不同

说明:

(1)严格模式下,在函数内部修改了对象的指向,对arguments的值不会产生影响

(2)在严格模式下,形参的值和arguments的值是相互独立的,在函数内部修改了形参的值对arguments不受影响

(3)在非严格模式下,修改了形参的值,arguments中的数据会跟着改变

//测试引用类型的值作为函数的参数
  function funcName(obj) {
    console.log(obj);
    console.log(arguments[0]);

    //在函数内部修改形参的值
    obj = {age:20};
    console.log(obj);
    console.log(arguments[0]);
}

funcName({name:"张三"});
//测试基本类型数据作为函数的参数
function fun(str) {
    console.log(str);
    console.log(arguments[0]);
    str = "hello";
    console.log(arguments[0]);
}

fun("hi");
**⑥ 禁用了argument.callee和caller函数**

说明:

* argument.callee是对函数自身的引用
* argument.calller是对调用函数的引用


        var num = (function (n) {
            if (n ==1)
            {
                return 1;
            }

            return arguments.callee(n-1) + n;
        })(10);

        console.log(num);       

**⑦ 不能在if语句中声明函数**


* 如果在if语句中声明函数,则会产生语法错误

  
         if (true)
        {
        console.log("________");
        function demo() {
            console.log("呵呵呵呵");
        }

        demo();
        }


**⑧ 禁止使用eval和argument作为标识符**


    var eval = "测试的字符串";
    console.log(eval);

    var arguments = "参数列表";
    console.log(arguments);


**⑨ 修正this的值**

 * 在严格模式下,函数this的值始终是指定的值,无论指定的是什么值
    
        var name = "测试的name";
        function demoTest() {

        //在非严格模式下,打印出来的this为全局的对象window
        console.log(this);  //在严格模式下打印出来的this为undefined
          }

        demoTest();


**⑩ 禁用了with语句**

    var o = {name:"小狐狸",age:20};
    with(o)
    {
        name = "lisi";
        age = 48
    }
    console.log(o);

相关文章

  • 开发中的严格模式

    js中有严格模式和非严格模式两种运行环境 在开发中,有非严格模式和严格模式2种开发模式 在严格模式下,会做更加严格...

  • 面向对象-严格模式、作用域

    严格模式 js有两中开发模式:非严格模式(默认)+严格模式(“ues strict”) 严格模式:会进行更严格的代...

  • 严格模式与混杂模式的区分?如何触发这两种模式?

    在前端开发的调试中,有可能会要求知道严格模式和混杂模式,而要知道严格模式和混杂模式,首先要知道DOCTYPE。 D...

  • JavaScript严格模式的限制

    use strict严格模式, 很推荐使用, 在开发中还是可以去使用严格模式的来进行代码编写避免不必要的性能损耗并...

  • StrictMode 严格模式

    StrictMode 严格模式 开发者经常会无意地犯些错误:在主线程读写磁盘、访问网络,严格模式能够把帮助开发者监...

  • 严格模式 学习笔记

    什么是严格模式严格模式是ECMAScript5中新增的,用于严苛规范javascript脚本执行的模式 严格模式的...

  • Javascript-基本知识(五)

    Javascript基本知识(五) 1.面向对象的方式管理图书 总结: 2.严格模式 JS有两种开发模式:严格模式...

  • JavaScript中的严格模式

    最近在看周爱民老师出版的JavaScript语言精髓与编程实践第三版,让我重新认识了js的严格模式,今天就分享一下...

  • JS中的严格模式

    严格模式的简单说明 为什么使用严格模式: 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;...

  • 瀑布和敏捷的区别

    瀑布开发模式: 瀑布开发模式特点: 1.严格把软件项目的开发分隔成各个开发阶段:需求分析、要件定义、基本设计、详细...

网友评论

    本文标题:开发中的严格模式

    本文链接:https://www.haomeiwen.com/subject/hbcgbxtx.html