手机版

详细说明了JS中的with替代方法和String中的常规方法

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

用语法

在代码中,要执行这样的功能

function computeExpression(exp,scope){ try { with(scope){ return eval(exp)};} } catch(e){ console . ERROR(' ERROR ',e);}}要求在作用域范围内执行,什么意思?

例如

scope={a:10,b :5 };exp=a * b;计算结果要求为15。在这种情况下,通常使用with语法。

但是:

js的解释器需要检查with块中的变量是否属于with中包含的对象,这将大大降低with语句的执行速度,使js语句难以优化。

在严格模式下,禁止使用语法。

并且我使用ES6语法来编写这个库,所以默认情况下启用严格模式。所以我必须用语法模拟一个。

先看看代码

函数replaceWith(scopeName,exp){ exp=' exp . trim();让quickRegex=/([\s\ \-\*\/%\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;exp=exp.replace(quickRegex,(a,b,c)={ return b scopeName . ' 'c .});返回exp}第一,首先去掉所有空格,为了和后面统一,在开头加一个空格。

第一场常规比赛就像' t.e==0?f : d '表达式中的变量提取为c,符号提取为B.

测试一下

现在,您可以返回一个表达式,修改它,并让表达式在其中直接执行

函数replaceWith(作用域,exp){ exp=' exp . trim();让quickRegex=/([\s\ \-\*\/%\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;exp=exp.replace(quickRegex,(a,b,c)={ return b 'scope . 'c .});让func=new Function('scope ',' return ' exp);返回func(作用域);}测试一下

你完蛋了。

可能中间规则写得不好,还有其他不严谨的地方。欢迎大家补充。

字符串原型上的常规方法

我已经很久没有写很多代码了。我看到了Sring . prototype . split(//);这个正则表达式,甚至把所有的分区符号都加到了数组里,在MDN里学起来很惊讶。对了,是补充。

String.prototype.split(分隔符,[限制])

Separator:指定用于分隔字符串的字符(字符串)。分隔符可以是字符串或正则表达式。如果省略分隔符,则返回整个字符串的数组形式。如果分隔符是空字符串,str将以数组形式返回原始字符串中的每个字符。

Limit是一个整数,用于限制返回的段数。split方法仍然拆分每个匹配的分隔符,但是返回的数组只截取最多有限的元素。

当找到分隔符时,分隔符将从字符串中移除,并返回存储在数组中的子字符串。如果忽略分隔符参数,则返回的数组包含一个元素,即原始字符串。如果分隔符是空字符串,字符串将被转换为由字符串中的字符组成的数组。

注意:

注意:当字符串为空时,split返回包含空字符串的数组,而不是空数组。

如果分隔符是正则表达式并包含捕获括号,则每次匹配分隔符时,捕获括号的匹配结果将被插入到返回的数组中。

var myString=' hello worldvar splits=MyString . split(();console.log(拆分);输出

[《你好,世界》]

var myString='Hello 1字。第二句话。var splits=MyString . split(/(\ d)/);console.log(拆分);输出

你好,1,有消息。第二句。

String.prototype.replace()

这个方法刚开始用,就不再介绍了。

String.prototype.match(Regex)

当字符串与正则表达式匹配时,match()方法提取匹配。

如果正则表达式没有G标志,它将返回与RegExp.exec(str)相同的结果。此外,返回的数组有一个额外的输入属性,其中包含原始字符串。此外,它还有一个index属性,指示原始字符串中匹配结果的索引(从0开始)。

1 ef 2 af 3 ef 4 5’。匹配(/[a-z] * (\ d)/)输出

['1', '1']

如果正则表达式包含g标志,此方法将返回一个包含所有匹配结果的数组。如果不匹配,则返回null。

注意,如果加了G,包就没用了

1 ef 2 af 3 ef 4 5’。匹配(/[a-z] * (\ d)/g)输出

['1 ',' aef2 ',' af3 ',' ef4 ',' 5']

String.prototype.search(Regex)

search()方法执行搜索以查看字符串对象是否匹配正则表达式。

如果匹配成功,search()将返回字符串中正则表达式的第一个匹配项的索引。否则,它返回-1。

类似正则表达式的测试方法。

AEG 56’。搜索(/[a-z]\d/)输出

2

摘要

以上就是本文的全部内容。希望这篇文章的内容对你的学习或工作有所帮助。有问题可以留言交流。

版权声明:详细说明了JS中的with替代方法和String中的常规方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。