zoukankan      html  css  js  c++  java
  • ECMAScript严格模式简介

    写在前面

    大家都知道使用"use strict"表示使用ECMAScript进行严格模式,使用"use strict"有两种方式

    • 在文件头部写上它(使得整个脚本都使用严格模式)
    • 在函数顶部写上它(只在函数内打开严格模式)

    对于严格模式和非严格模式下,到底有哪些不同,下面我将一一道来。

    变量

    严格模式下 非严格模式下
    不允许意外创建全局变量 允许省去var来创建全局变量
    不能对变量调用delete操作符(也就是说使用delete来删除变量时操作会直接报错) 允许使用delete但操作失败(也就是说使用delete来删除变量时操作时不会直接报错)

    对象

    严格模式下 非严格模式下
    不允许为只读属性赋值 允许为只读属性赋值
    不允许对不可配置(nonconfiguratable)属性使用delete操作符 允许对不可配置(nonconfiguratable)属性使用delete操作符
    不允许为不可扩展(nonextensible)的对象添加属性 允许为不可扩展(nonextensible)的对象添加属性
    使用对象字面量时,属性名必须唯一 使用对象字面量时,属性名可以重复

    函数

    严格模式下 非严格模式下
    函数参数不能重复 函数参数可以重复,如果重复的话,参数最终的取值为第二个,如果要取得第一个的话则得使用arguments
    函数参数和arguments是完全独立的 修改命名参数的值同时会反映到arguments对象当中
    淘汰arguments.callee和arguments.caller arguments.callee代表引用函数本身、arguments.caller调用当前引用函数的函数

    不允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名

    (因为这些是js当中的保留字并且已经在新的语法当中使用起来了)

    允许使用inplements、interface、let、package、private、protected、public、static、yield作为函数名

    eval

    在严格模式下在eval中不再创建变量或函数

    可以在eval中声明变量和函数,但这些变量或函数只能被求值的特殊作用域中有效,随后就被销毁了。

    eval和arguments

    严格模式下禁止使用eval和arguments作为标识符,也不允许读写它们的值

    非严格模式下可以重写eval,也可以给arguments赋值

    抑制this

    在非严格模式下使用apply和call方法时,null或undefined值被转换为全局对象

    严格模式下,传进去的是什么,this就是什么

    with

    严格模式下已经废弃了with,但是非严格模式下可以使用with

    parseInt的八进制

    严格模式下去掉了javaScript的八进制字符量

  • 相关阅读:
    CSUST 8.4 早训
    CSUST 8.5 早训
    hdu1542 Atlantis 线段树--扫描线求面积并
    hdu1540 Tunnel Warfare 线段树/树状数组
    hdu1535 Invitation Cards 最短路
    hdu1358 Period KMP
    SQL Server 向数据库中创建表并添加数据
    初次实践数据库--SQL Server2016
    hdu1301 Jungle Roads 最小生成树
    hdu1281 棋盘游戏 二分图最大匹配
  • 原文地址:https://www.cnblogs.com/liyunhua/p/4495547.html
Copyright © 2011-2022 走看看