JS 中严格模式 与 非严格模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33189908/article/details/80606249

一 .      严格模式

               1.     使用 use strict 指令后,后续的代码将会解析为严格代码

               2.     eval()调用时所处的代码是 严格代码或是它要执行的字符串使用了 scrict code 指令,则其内部代码为严格代码

二.     严格代码与非严格代码的区别

                1.    严格代码禁止使用 with 语句

                2.    严格模式:所有的变量都要先声明,如果给一个未声明的变量,函数,函数参数,catch从句参数或全局对象的属性赋值,将会抛出引用错误异常;

                        非严格模式:  隐式声明的全局变量  是给全局对象新添加一个新属性

                3.    严格模式: 调用函数(不是方法)中的 this 值为 undefined;

                        非严格模式:this 是全局对象

                         注:可通过该特性来判断js实现是否支持严格模式在方法里return   this ===undefined;

                4.    严格格式:通过 call()  或 apply() 来调用函数时,this 是通过他们传入的第一个参数

                       非严格模式:null 和 undefined 值被全局对象和转换为对象的非对象值所代替

                5.    严格模式:    给只读属性赋值 或 给 不可扩展的对象 创建新成员都会抛出类型错误异常

                       非严格模式: 操作失败,不会报错

               6.    严格模式 : 传入 eval() 的代码不能在调用程序所在的上下文中声明变量或定义函数,

                       非严格模式 :可以调用程序所在的上下文中声明变量或定义函数,但是变量和函数的定义在eval()创建的新作用域中,这个作用域在eval()返回时弃用

              7.    严格模式 : 函数里arguments对象拥有传入函数值的静态副本,

                      非严格模式 :arguments对象里的数组元素和函数参数都是指向同一个值的引用

              8.    严格模式 : delete后跟随非法标识符(变量,函数,函数参数)会抛出语法错误异常,

                      非严格模式 :delete表达式什么也没做,返回false

              9.    严格模式 : 删除一个不可配置的属性将抛出类型错误异常,

                      非严格模式 :删除失败,返回false

           10.    严格模式 : 在一个对象直接量中定义两个或多个同名属性将产生语法错误,

                                              函数声明中存在两个或多个同名的参数将产生语法错误

                      非严格模式 :不会报错

            11.    严格模式 : 不允许用八进制整数直接量(以0位前缀)

                       非严格模式 :某些实现是允许的

            12.    严格模式 : 标识符eval 和arguments当做关键字,他们的值是不能更改的,不能给这些标识符赋值,也不能把他们声明为变量,用做函数名,用做函数参数或用做catch块的标识符

                                    限制了对调用栈的检测能力,arguments,caller,arguments。callee都会抛出一个类型错误异常,

猜你喜欢

转载自blog.csdn.net/qq_33189908/article/details/80606249
今日推荐