【JavaScript】JS中类似宏变量、宏替换的用法(eval和 new Function)
2023-09-11 14:15:11 时间
Js中执行变量中的命令语句,也就是所谓的宏替换(很实用的例子)
由其做动态编程时非常有用,必须符合js中的语法,用eval能够执行。
var aaa="alert('这是变量中的语句')";
eval(aaa);
1、ES6例子(eval)
let aaa = `
if (m_class == '1' && m_titleId == one_item.titleId)
{ ${uuu}.splice(0,2);alert('111'); }
`
eval(aaa);
2、通用例子(eval)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
var a1 = "张飞";
var a2 = "李白";
alert("改前的a2=" + a2);
var i = 2;
comm = "a" + i + "=" + "'中国人'";
alert(comm);
eval(comm);
alert("改后的a2=" + a2);
</script>
</html>
3、new Function(考虑兼容性、可读性和安全性问题,强烈推荐这个,不推荐eval)
变量
let aaa="look";
let fn = new Function(`console.log('${aaa}')`); //'a'
fn();
传参:
let m_name="终于实现宏替换了!";
let m_com = "return "+`alert('${m_name}')`;
let fn = new Function(m_com);
fn();
4、在Vue2中new Function宏替换的应用示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>js实现变量名的宏替换</title>
</head>
<style>
.mButton {
height: 100px;
width: 200px;
background-color: rgb(48, 111, 228);
margin: 0 auto;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.13/dist/vue.js"></script>
<body>
<div id="arrlist">
<div @click.stop="jsonDelete('y')" class="mButton"></div>
</div>
</body>
<script type="text/javascript">
// 通过Js操作数组和对象最详细实例(图文+完整源代码)
var arrlist = new Vue({
el: "#arrlist",
data: {
y: [{ "id": "888" }, { "id": "666" }],
x: [{ "id": "119" }, { "id": "110" }],
},
methods: {
jsonDelete(ArrayName) {
alert('aaa');
let fn = new Function(`return this.${ArrayName}`).bind(this);
s=fn();
alert(s[0].id);
}
},
})
</script>
</html>
5、在Vue3中new Function宏替换的应用示例
<template>
<div class="m_box" @click="noSeeAll">
<!-- 第一个固定标签 -->
<div @click.stop="jsonDelete('x')" class="mButton"></div>
</div>
</template>
<script>
import { reactive} from "vue";
export default {
name: "LoginPage",
setup() {
let y = reactive([{ "id": "888" }, { "id": "666" }]);
let x =reactive([{ "id": "119" }, { "id": "110" }]) ;
let vm
// =============================【Json删除】
// function jsonDelete() {
function jsonDelete(ArrayName, ClassNumber, KeyName, Id, TwoKeyName, ThreeKeyName) {
alert(ArrayName);
let fn = new Function(`return this.${ArrayName}`).bind(vm);
let s=fn();
alert(s[0].id);
}
vm = {
y,
x,
jsonDelete
}
// ================================ 【return - 变量和方法名】
return vm;
},
};
</script>
<style scoped>
.mButton {
height: 100px;
width: 200px;
background-color: rgb(48, 111, 228);
margin: 0 auto;
}
</style>
在此,感谢QQ呢称为【鲸】的好友,帮我解决了很多问题。
相关文章
- JS框架_(Bootstrap.js)实现简单的轮播图
- javascript基础修炼——手把手教你造一个简易的require.js
- JavaScript与有限状态机
- ASPX导入JS,JavaScript乱码怎么办
- Android中WebView如何加载JavaScript脚本
- JavaScript经典代码【一】【javascript HTML控件获取值】
- [Javascript] Build lodash.merge from Scratch
- [Javascript] Deep merge in Javascript with Ramda.js mergeDeepWith
- [Functional Programming] Draw Items from One JavaScript Array to Another using a Pair ADT
- [Javascript] Hide Properties from Showing Up in "for ... in" Loops in JavaScript
- [Javascript] JavaScript赋值时的传值与传址
- [Javascript] Improve Composition with the Compose Combinator
- JavaScript 中的 this
- javascript (js)中的基本概念
- Cordova插件中JavaScript代码与Java的交互细节介绍
- SAP产品和3D渲染技术的结合-使用JavaScript的开源3D渲染库实现
- Javascript中this关键字详解
- Atitit.js模块化 atiImport 的新特性javascript import
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
- Angular platform-server.js 里动态创建 JavaScript 标签页的场景
- SAP Spartacus TypeScript和编译后的JavaScript命名规范
- 从零开始学_JavaScript_系列(20)——js系列<7>(函数原型的两种声明方式、函数的作用域)
- JS与ES6高级编程学习笔记(一)——JavaScript核心组成
- JS与ES6高级编程学习笔记(三)——JavaScript面向对象编程
- Javascript正则表达式的初步学习
- 【JavaScript】JS读取XML文件并进行搜索
- python web py入门(24)- javascript的乘法
- 常见的windows下无文件落地攻击手法——主要讨论了powershell脚本、HTA是HTML Application的缩写(HTML应用程序)、xml中利用COM组件、certutil下载然后调用Dcom组件执行恶意代码、msxsl.exe是微软用于命令行下处理XSL的可以执行JavaScript执行系统命令
- 最全的Javascript编码规范(推荐)