js 额外知识

news/2024/12/22 14:59:52/

加油,嘎嘎嘎 🤣 💕💕💕

文章目录

  • 一、 with
  • 二、 eval 函数
  • 三、严格模式
  • 三、严格模式的限制


一、 with

  1. with语句 扩展一个语句的作用域链。 会形成一个自己的作用域
  2. 不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。
  3. 开启严格模式会报错
var obj = { name: 123, age: 34 };function foo() {with (obj) {console.log(name);}}

二、 eval 函数

  • 是一个特殊的全局函数,它可以将传入的字符串当做JavaScript代码来运行。

不建议在开发中使用eval :

  1. eval代码的可读性非常的差(代码的可读性是高质量代码的重要原则);
  2. eval是一个字符串,那么有可能在执行的过程中被刻意篡改,那么可能会造成被攻击的风险;
  3. eval的执行必须经过JS解释器,不能被JS引擎优化; (js 解释器,转化bytecode ,)

在这里插入图片描述
如果写es6.js 或者是ts 代码,就会使用webpack 进行转化 es5 ,在webpack 中有个库:devtool:‘eval’ ,他用的就是eval,这样性能更高,因为传入的是一个字符串,这只是生成临时代码,打包的不是这样
不需要生成js 代码

代码尽可能写的可读性强!

三、严格模式


因为js 代码非常灵活,比如 123.name 就不会报错

	//在JavaScript文件的首行加入 "use strict" "use strict"//特定函数严格模式)在函数的作用域内部单独开启严格模式,仅仅对这个函数的内部生效function foo() {"use strict";true.foo = "abc"//开启严格模式后,这里会报错}foo()

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

  1. 严格模式很好理解,是一种具有限制性的JavaScript模式,从而使代码隐式的脱离了 懒散(sloppy)模式
  2. 支持严格模式的浏览器在检测到代码中有严格模式时,会以更加严格的方式对代码进行检测和执行

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

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

三、严格模式的限制


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

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

http://www.ppmy.cn/news/1022201.html

相关文章

手机里视频太大怎么压缩?压缩教程分享

现在视频文件的体积越来越大了,动不动就是几个GB起步,如果后期再剪辑处理一下,更是会占据更多的设备空间了,还会导致我们传输受到限制,这时候就需要我们对视频进行压缩处理,下面给大家分享几个简单的方法&a…

2308d亚当arsd的11版本

原文 此版本中稳定的东西: 1,arsd.archive这里现在支持gzip这里,方便tar文件,及更易使用的lzma的接口. 2,arsd.game现在已出现在Dub中,但注意它目前不稳定. 3,各种文档改进,包括但不限于cgi.d这里中的更多示例. 4,arsd.cgi这里现在可一次监听包括IPv6接口的多个接口. 5,cgi.d可…

数据分析-python学习 (1)numpy相关

内容为:https://juejin.cn/book/7240731597035864121的学习笔记 导包 import numpy as np numpy数组创建 创建全0数组,正态分布、随机数组等就不说了,提供了相应的方法通过已有数据创建有两种 arr1np.array([1,2,3,4,5]) 或者datanp.loadt…

Java版企业电子招标采购系统源码—企业战略布局下的采购寻源tbms

​ 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…

爱立信网管工具使用-Tools for Export Import(TEI)

1、TEI使用 2、数据导出 打开 OSS Common Explorer,如下图,右键“ONRM_ROOT_MO_R”,选择“Export” MO type filter:为了避免生产的 BULK CM export 文件太大(可能会达到几个 G,TEI 转换时,对输入的 BULK CM expor…

数组对象去重的几种方法

场景: let arrObj [{ name: "小红", id: 1 },{ name: "小橙", id: 1 },{ name: "小黄", id: 4 },{ name: "小绿", id: 3 },{ name: "小青", id: 1 },{ name: "小蓝", id: 4 } ]; 方法一:…

SpringBoot整合多数据源

SpringBoot整合多数据源 在实际企业项目开发中,我们经常会在SpringBoot项目中配置多数据源,一方面可以减缓数据库压力,另一方面可以也是业务需求的场景 下面就来看看如何在SpringBoot项目中配置多数据源 POM 在配置多数据源之前&#xff…

设计模式(2)工厂方法模式

一、 1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说…