位置: 编程技术 - 正文

理解javascript中的严格模式(js怎么理解)

编辑:rootadmin

推荐整理分享理解javascript中的严格模式(js怎么理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript原理详解,如何理解javascript,js怎么理解,简述javascript,javascript中的函数如何理解,javascript中的函数如何理解,javascript中的函数如何理解,javascript深入理解,内容如对您有帮助,希望把文章链接给更多的朋友!

一、什么是严格模式我们平时写的JavaScript代码一般都运行在正常模式中的,除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。看名字就知道,这种模式会让JavaScript在更严格的环境中运行。包括IE 在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱。(github上面好多项目都是用的严格模式)二、启用严格模式为整个脚本启用严格模式在所有语句之前放一个特定语句 "use strict";假设有一个脚本reeoo.js,可以这样开启严格模式:

BUT这种写法存在天然的坑,假如我们要做代码合并,我现在要把heigui.js:

和reeoo.js进行合并,本来两个脚本分开执行是好好的,合起来就会报错。Uncaught ReferenceError: heigui is not defined(…)一个严格模式的脚本和一个非严格模式的脚本合并可能会导致非严格模式的脚本代码报错,建议代码都包在一个立即执行函数里面。

这样合并之后就不会报错了。为某个函数启用严格模式要给某个函数开启严格模式,得把"use strict"; 声明放在函数体所有语句之前就行了。

Chrome中调试严格模式我有这么一段代码:

把这段代码直接粘贴到Chrome的控制台中执行,正常情况下应该报错,但是并没有报错,

很显然,严格模式下变量不适用var声明是不合法的,但是为什么没有报错?这是什么鬼,难道Chrome不支持严格模式?开什么玩笑。。。网上搜了一下,原来Chrome的控制台的代码是运行在eval之中的,你没法对eval函数使用严格模式(应该也不完全对,但是具体Chrome做了什么,不得而知),下图说明eval函数可以使用严格模式:

要想在Chrome浏览器中对严格模式正常报错,需要在代码外层套一个立即执行函数,或者其它类似的措施。

这样就可以了FireFox代码草稿纸调试严格模式Chrome非要我们包一层闭包才能跑严格模式,既然这么麻烦,有没有别的方式可以直接跑严格模式的代码呢?FireFox有一个代码草稿纸可以直接跑,快捷键SHIFT+F4

严格模式到底有多严格严格模式中一些重要的限制

1、变量声明不允许使用一个没有声明的变量

报错(代码草稿纸,下同)Exception: ReferenceError: assignment to undeclared variable name

2、修改只读属性的值

严格模式下会报错:Uncaught TypeError: Cannot assign to read only property 'prop1' of #<Object>非严格模式顶多就是值赋不上去而已,并不会报错

3、修改不可扩展的属性表现为将属性添加到 extensible 属性设置为 false 的对象。

严格模式报错:Uncaught TypeError: Can't add property name, object is not extensible非严格模式不会报错,但是testObj也不会被扩展。4、删除变量、函数或参数删除 configurable 特性设置为 false 的属性。

理解javascript中的严格模式(js怎么理解)

报错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.

5、在一个对象文本中多次定义某个属性严格模式下不允许一个属性有多个定义

报错(node控制台)Duplicate data property in object literal not allowed in strict mode正常模式中后声明的重复的变量会覆盖前面声明的,而且不会报错。注:这个问题在ECMAScript6中已被修复。

6、严格模式下不允许形参参数名称重复

报错:Uncaught SyntaxError: Duplicate parameter name not allowed in this context

7、无法使用标识符的未来保留字。严格模式下将保留标识符名称一下标识符(ES6中依然没有实现的)在严格模式中是不能使用的,否则也会报错。用了就是这个下场:Uncaught SyntaxError: Unexpected strict mode reserved word

implements interface package private protected public static yield

8、严格模式下不允许使用八进制数字参数和转义字符

报错:Uncaught SyntaxError: Unexpected token ILLEGAL(…)9、当this 的值为 null 或 undefined 时,该值不会转换为全局对象比如:

在非严格模式下,testvar 的值为全局对象window,但在严格模式下,该值为 undefined。

、字符串"eval"不能用作标识符(变量或函数名、参数名等)

Uncaught SyntaxError: Unexpected eval or arguments in strict mode

、在严格模式下,函数声明无法嵌套在语句或块中。它们只能显示在顶级或直接显示在函数体中

node控制台:SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function.但是这个限制已经在ES6中被修复、严格模式下eval用法无效如果在 eval 函数内声明变量,则不能在此函数外部使用该变量。

Uncaught ReferenceError: testvar is not defined

、严格模式下"arguments"用法无效字符串”arguments”不能用作标识符(变量或函数名、参数名等)。

Uncaught SyntaxError: Unexpected eval or arguments in strict mode

这个跟上面第条的限制是差不多的。、函数内的 arguments,无法更改arguments 对象的成员的值

在非严格模式下,可以通过更改 arguments[0] 的值来更改 oneArg 参数的值,从而使 oneArg 和 arguments[0] 的值都为 。在严格模式下,更改 arguments[0] 的值不会影响 oneArg 的值,因为 arguments 对象只是一个本地副本。、不允许使用arguments.callee

用了的下场就是这样:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them、不允许使用with

Uncaught SyntaxError: Strict mode code may not include a with statement为什么要使用严格模式既然这种模式这么多限制,我为什么还要用呢?闲得蛋疼吗?当然8是,JavaScript作为一门一开始用于浏览器的脚本语言,容错性非常好,即使有时候你的代码写的不标准,也不会报错,但这有时候会变成代码隐患。开启了严格模式之后,JavaScript的一些不合理的不严谨的语法都会得到控制,让你能够更严谨的书写JavaScript代码,成为一个更好的程序员。严格模式是ES5时代的产物,ES已经在普及的路上,是时候使用严格模式了!

参考 严格模式 严格模式

原文:

基于JavaScript判断浏览器到底是关闭还是刷新(超准确) 本文是小编总结的一些核心内容,个人感觉对大家有所帮助,具体内容请看下文:页面加载时只执行onload页面关闭时只执行onunload页面刷新时先执行onbefo

基于JavaScript实现动态添加删除表格的行 又一个动态控制表格的效果,用JavaScript动态生成表格行、表格列,以及还可动态删除这些行列,行等,运行代码后,点击对应的功能按钮,即可实现对

javascript实现右侧弹出“分享到”窗口效果 本文实例讲解了javascript实现右侧弹出分享到窗口的详细代码,分享给大家供大家参考,具体内容如下效果图:具体代码:htmlheadmetacharset="gb"title/titles

标签: js怎么理解

本文链接地址:https://www.jiuchutong.com/biancheng/381695.html 转载请保留说明!

上一篇:浅析JavaScript作用域链、执行上下文与闭包(javascript设计的初衷和特点)

下一篇:基于JavaScript判断浏览器到底是关闭还是刷新(超准确)(javascript判断)

  • 基础电信服务税率和增值电信服务税率
  • 用于非增值税应税项目、免征增值税项目
  • 视同销售的销售额如何确定
  • 企业持有到期债券的风险
  • 境外中资企业转让股权的涉税处理
  • 管理费用会计科目代码是多少
  • 销售息税前利润是什么
  • 权益性投资收益的账务处理
  • 收到的货品与实体不符
  • 无偿赠送材料的会计处理
  • 管家婆进货单科目名称怎么录入?
  • 非货币性资产交换的会计处理
  • 公司购买办公用品计入什么科目
  • 收购烟叶委托加工烟丝组成计税价格
  • 报价需要提供哪些资料
  • 增值税减免税如何处理
  • 留抵进项税额可以挂在转出未交增值税吗
  • 上年度的费用今年开票分录
  • 收到其他公司的捐赠收入怎么处理
  • 公司成立之后有人投资怎么做分录?
  • 高新企业申报指南
  • 什么叫管理口径报表
  • 生产企业出口退税申报系统详细操作流程
  • 工资薪金所得税率表2023
  • 每个季度零申报需要做什么
  • 已达到计算机的连接数最大值win7
  • 信息技术费用如何做分录
  • 预提利息的分录怎么做
  • Laravle eloquent 多对多模型关联实例详解
  • 所得税汇算清缴前取得跨年发票
  • 工会会员会费缴费证明怎么开
  • win10电脑时间改了又跳回去
  • 股权激励的账务处理
  • 金税盘不能清卡的原因
  • 请问酒厂销售酒怎么样?
  • 快递行业一般纳税人税率是多少
  • vscode前端必备扩展
  • 获取谷歌浏览器cookie
  • 银行存放中央银行准备金的会计处理
  • 工作服钱可否收取
  • 征收率是税率吗
  • 社保和公积金在不同单位交可以吗
  • 公司少申报个税
  • arraylist源码分析1.8
  • 分享帝国cms首页在哪
  • canvas实现图片编辑
  • mysql好在哪里
  • 织梦系统
  • 预付款为什么不扣质保金呢
  • 印花税征税范围及税率
  • 维修费开专票怎么做账
  • 处置使用过的固定资产,税率按多少
  • Centos5.5中安装Mysql5.5过程分享
  • 合伙企业法人股东税收
  • 支付给法律顾问怎么做账
  • 进项税和销项税月末怎么结转
  • 对公可以转个人账户货款吗
  • 委托代销业务的会计分录
  • 资产减值准备怎么提
  • 房地产企业预缴土地增值税
  • 利润表的所得税和所得税申报表所得税
  • 国税退回多缴税款
  • 工程施工发生的酒水费会计分录
  • 未开发票已付款
  • mysqldump命令在哪里执行
  • sql2000数据库怎么使用
  • centos调出命令行
  • 连接远程mq
  • mac电脑apple id
  • win7系统IE浏览器打开跳转到360浏览器,怎么阻止
  • win10电脑无法上网
  • windows听歌软件
  • dos命令查看
  • javascript的
  • jquery设置div的宽度和高度
  • 网上交购置税怎么拿完税证明
  • 注册财税公司需要什么条件
  • 税控盘时间不对有影响吗
  • 社保缴费信息提醒怎么改
  • 建筑企业异地经营需要备案吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设