【JavaScript高级】05-JavaScript中with、eval语句及严格模式的使用

news2024/11/27 16:48:15

with、eval及严格模式的使用

  • with语句的使用(了解)
  • eval函数
  • 严格模式
    • 了解严格模式
    • 开启严格模式
    • 严格模式的限制

with语句的使用(了解)

  1. with语句的作用是将代码的作用域设置到一个特定的对象中。目的主要是为了简化多次编写同一个对象的工作。
  2. 使用with语句可以关联location对象,也就是说,在with语句的代码块内部,每个变量首先会被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,则会查询location对象中是否有同名的属性。如果发现了同名的属性,则以location对象属性的值作为变量的值。
  3. 严格模式下不允许使用with语句,否则将视为语法错误。

with语句扩展一个语句的作用域链:

在这里插入图片描述

所以不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。

eval函数

内建函数eval允许执行一个代码字符串

  • eval是一个特殊的函数,它可以将传入的字符串当做JavaScript代码来运行;
  • eval会将最后一句执行语句的结果,作为返回值;
    在这里插入图片描述
    不建议在开发中使用eval:
  • eval代码的可读性非常的差(代码的可读性是高质量代码的重要原则) ;
  • eval是一个字符串,那么有可能在执行的过程中被刻意篡改,那么`可能会造成被攻击的风险;
  • eval的执行必须经过JavaScript解释器,不能被JavaScript引擎优化;

严格模式

了解严格模式

JavaScript历史的局限性:

  • 长久以来,JavaScript 不断向前发展且并未带来任何兼容性问题;
  • 新的特性被加入,旧的功能也没有改变,这么做有利于兼容旧代码;
  • 但缺点是JavaScript创造者的任何错误或不完善的决定也将永远被保留在JavaScript语言中

在ECMAScript5标准中,JavaScript提出了严格模式的概念(Strict Mode) :

  • 严格模式很好理解,是一种具有限制性的JavaScript模式,从而使代码隐式的脱离了"懒散(sloppy)模式";

  • 支持严格模式的浏览器在检测到代码中有严格模式时,会以更加严格的方式对代码进行检测和执行;

严格模式对正常的JavaScrip语义进行了一些限制:

  • 严格模式通过抛出错误来消除一些原有的静默(silent)错误;
  • 严格模式让JS引擎在执行代码时可以进行更多的优化(不需要对一些特殊的语法进行处理
  • 严格模式禁用了在ECMAScript未来版本中可能会定义的一些语法;

开启严格模式

严格模式(严格模式支持粒度话的迁移)

  • 可以支持在js文件中开启严格模式;
  • 也支持对某一个函数开启严格模式;
  • 严格模式通过在文件或者函数开头使用use strict来开启。
    在这里插入图片描述
    (没有类似于"no use strict”这样的指令可以使程序返回默认模式)

现代JavaScript支持“class”和“module”,它们会自动启用use strict;

严格模式的限制

严格模式下的严格语法限制:

  • JavaScript被设计为新手开发者更容易上手,所以有时候本来错误语法,被认为也是可以正常被解析的;
  • 但是这种方式可能给带来留下来安全隐患;
  • 在严格模式下,这种失误就会被当做错误,以便可以快速的发现和修正;

1.无法意外的创建全局变量
⒉严格模式会使引起静默失败(silently fail,注:不报错也没有任何效果)的赋值操作抛出异常
3.严格模式下试图删除不可删除的属性
4.严格模式不允许函数参数有相同的名称
5.不允许0的八进制语法
6.在严格模式下,不允许使用with
7.在严格模式下,eval不再为上层引用变量
8.严格模式下,this绑定不会默认转成对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记50】ES6的新增属性1

一、ES6 * ES6 * 其实就是JS发展过程中的某一个版本而已, 那个版本的版本号叫做ES6* JS* 在最初的时候, 是只有var关键可以声明变量* 随着版本的更新, 在某一个版本内推出了新的变量声明方式* * JS的更新* 在推出ES6的时候, 这个版本推出的新东西比较多…

[附源码]Python计算机毕业设计高校教材网上征订系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

SQL关键字详解

当前市场中,数据库在互联网整个技术链中的重要性是亘古不变的,站在实现业务功能的角度来说我们最常用的就是与数据库和缓存进行交互,而最终持久化存储最常见的依旧是关系型数据库。数据库中我们做常用的就是SQL基本查询语言,甚至有…

临近期末,这些题不来看看吗?(上)

目录 1、在屏幕上输入9*9乘法表 2、输入一个值,打印对应的乘法口诀表 3、求十个整数的最大值 4、分数求和:计算1/1 - 1/2 1/3 - 1/4 1/5 ... 1/99 - 1/100(3种方法) 5、编写程序数一下,1到100的所有整数中出现多…

ggrcs 包2.4绘图实际操作演示(1)

ggrcs 包2.4版本已经发布一段时间了,大概几个月了吧,收到不少好评, 没听说太大的问题,最主要的问题有两个: 1.是说变量不是数字变量。 2.是说数据超过10万,无法处理 第一个问题非常好处理,这…

【精品】k8s的存储PV与PVC详解

概述 PV(Persistent Volume)一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。 PVC(Persistent Volume Claim)是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需…

vscode开发maven的javaweb项目,并部署到tomcat及配置

1、安装并配置JAVA环境 我的是用的jdk1.8.0_181(安装自行解决,直接可以下载免安装配置环境) 配置JAVA_HOME,设置路径为C:\Program Files\Java\jdk1.8.0_181, 添加bin到path环境变量: 2、安装Maven 1)官网…

垃圾分类小程序系统毕业设计,垃圾分类小程序系统设计与实现,垃圾分类系统毕设参考

功能清单 【管理员功能】 会员管理:查看网站所有注册会员信息,支持删除 资讯录入:录入资讯标题、时间、资讯内容等 管理资讯:查看现有资讯列表,支持修改和删除功能 留言管理:查看小程序留言列表&#xff0…

Azide PEG2 Pyrene|2135330-58-2|Pyrene标记的PEG连接物

Pyrene-PEG2-azide是一种含有叠氮化物基团的Pyrene标记的PEG连接物,它可以用任何含炔分子进行点击化学标记,从而将任何分子转化为含Pyrene的探针。亲水性PEG连接剂可以增加水溶液中生物分子的溶解度并促进其附着。 西安凯新生物科技有限公司azide系列产品…

Python人工智能学习路线(万字长文)

前言 随着全球市场的饱和,以及模式创新的用尽,传统的互联网产业已经进入成熟阶段,不会再有突飞猛进的发展。 (文末送读者福利) 接下来,是人工智能和大数据展露锋芒的时候了,它们在未来 10 年…

欧拉公式-上帝创造的公式

欧拉公式: (1)分式里的欧拉公式:   a^r/(a-b)(a-c)b^r/(b-c)(b-a)c^r/(c-a)(c-b)   当r0,1时式子的值为0   当r2时值为1   当r3时值为abc   (2)复变函数论里的…

firefly3399专题1-uboot2022.10的移植

硬件信息: friefly3399一块,2GB内存/16Gemmc。 软件信息: ubuntu18.04虚拟机,内部有firefly的SDK包。 参考资料:[ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot(基于v2022.04-rc5版本)_Neution…

数据库变更管理:Liquibase or Flyway

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实操 SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理:Li…

ZMQ/ZeroMQ的三种消息模式

一、 Reuqest-Reply(请求-应答模式) 1、使用Request-Reply模式,需要遵循一定的规律。 2、客户端必要先发送消息,在接收消息;服务端必须先进行接收客户端发送过来的消息,在发送应答给客户端,如此循环 3、服务端和客户端…

RabbitMQ(基于AMQP的开源消息代理软件)

一、AMQP高级消息队列协议 (1)介绍 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客…

图神经网络关系抽取论文阅读笔记(四)

1 GDPNet:用于关系提取的潜在多视图图的精炼(GDPNet: Refining Latent Multi-View Graph for Relation Extraction) 论文:GDPNet: Refining Latent Multi-View Graph for Relation Extraction,2021 1.1 引言 由于基于 BERT 等序列模型与基于图模型算法是…

模块首页UX交互升级,接口测试支持禁用本地执行,MeterSphere开源持续测试平台v2.4.0发布

2022年11月28日,MeterSphere一站式开源持续测试平台正式发布v2.4.0版本。 在这一版本中,MeterSphere在测试跟踪和接口测试模块中对首页进行了UX交互升级,将部分指标进行了饼图、柱状图的展示优化,同时根据社区用户的实际使用反馈…

计算机毕业设计【HTML+CSS+JavaScript服装购物商城】毕业论文源码

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

JS进阶第二篇:函数参数按值传递

文章目录函数参数按值传递按值传递引用传递?应用函数参数按值传递 按值传递 在 JavaScript 中,我们有函数以及传递给这些函数的参数。但是 JavaScript 对如何处理你传递的内容并不总是很清楚。当你开始进入面向对象开发的时候,你可能会发现…

【Hack The Box】Linux练习-- Shibboleth

HTB 学习笔记 【Hack The Box】Linux练习-- Shibboleth 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 &#…