美文网首页
JS严格模式知识点总结

JS严格模式知识点总结

作者: lueyoo | 来源:发表于2018-04-24 15:05 被阅读0次

    1.严格模式下没有全局变量
    a="test"
    严格模式下会报错,非严格模式下正常

    2.删除变量
    var 有三种声明的情形

    1. var 声明的全局变量
    2. var 声明的局部变量
    3. eval()中声明的全局变量
      第一种和第二种情况是无法用 delete删掉的。
      首先第一种情况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是无法删除的
      第二种情况 局部变量更不行了,连依附的对象是谁都不知道,怎么删除
      第三种情况eval()稍后会说到。
      回归正题。也就是说非严格模式下,可以删除变量,但是会失败返回false.
      严格模式下删除变量会报错。

    3.对象
    在下列情况下操作对象会报错

    1. 为只读属性赋值会报错
    2. 对不可配置的属性使用delete 会报错
    3. 为不可扩展的对象添加属性会报错
    4. 在使用对象字面量的时候,属性名必须唯一。
      比如:
      var person={
      name:"1",
      name:"2"
      }
      非严格模式下会默认取值第二个,严格模式下会报错。

    4.函数
    严格模式要求函数参数名称必须唯一
    function(m,n){
    // todo
    }

    在非严格模式下,这个函数声明不会报错,通过参数名只能访问到第二个参数,第一个参数得通过arguments去访问。
    arguments在两种模式下也有所不同。

    在非严格模式下,修改命名参数的值会反映到arguments对象中,在严格模式下两个值是独立的。

    淘汰了 arguments.callee(引用函数本身),arguments.caller(引用调用函数)。
    严格模式下函数名不能使用js保留字。
    严格模式下只能在脚本的顶级和在函数内部声明函数,在if语句中声明函数会导致语法错误。
    if (true){
    function (){
    // 严格模式下报错
    }
    }

    5.this
    在非严格模式下使用函数的apply(),call(),传入null 或者undefined值会被转换为全局对象。在严格模式下,函数的this始终是指定的值,无论指定的是什么值。
    var a= "1";
    function test(){
    console.log(this.a)
    }

    test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。

    相关文章

      网友评论

          本文标题:JS严格模式知识点总结

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