Heim  >  Artikel  >  WeChat-Applet  >  Das Problem, dass die Auswertungsfunktion bei der WeChat-Applet-Entwicklung nicht verwendet wird

Das Problem, dass die Auswertungsfunktion bei der WeChat-Applet-Entwicklung nicht verwendet wird

高洛峰
高洛峰Original
2017-02-10 13:29:003039Durchsuche

1. Das Problem mit der Bewertungsfunktion

Die Bewertungsfunktion in JavaScript ist eines der umstrittensten Probleme unter Entwicklern. Das Hauptproblem liegt in der Unsicherheit, die sie verursachen kann. Ich werde hier nicht näher auf dieses Thema eingehen, und die Leser können problemlos viele Einführungsartikel durchsuchen.

Aber auch die Vorteile der Eval-Funktion liegen auf der Hand. Verwenden Sie beispielsweise JS, um ein Taschenrechnerprogramm zu schreiben. Wenn Sie auf eine Zeichenfolge wie „2+1-3*5“ stoßen, können Sie diese einfach mit eval berechnen, ähnlich wie:


var s="2+1-3*5";

console.log(eval(s));


Zwei Beim Üben des WeChat-Miniprogramms sind Probleme aufgetreten


(1) Die WeChat-Miniprogrammumgebung unterstützt die Bewertungsfunktion nicht


Während ich die WeChat-Applet-Entwicklung lerne, möchte ich ein Werkzeug wie einen Taschenrechner verwenden, um das Schreiben zu üben – hauptsächlich, weil ich mich mit seinen Fähigkeiten zur Layoutsteuerung vertraut machen möchte. Also bin ich auf das oben genannte Problem gestoßen. Es liegt nahe, über die Verwendung der Funktion „eval“ nachzudenken, da wir beim Programmieren auf eine große Anzahl von Zeichenfolgen stoßen, die den oben genannten ähneln und einen numerischen Ausdruck enthalten. Es ist jedoch der folgende Fehler aufgetreten:

VM773:1 Uncaught TypeError: eval is not a function(…)


(2) new Function() Lösung Auf keinen Fall!


Nach der vorläufigen Netzwerkerkundung hatte ich keine andere Wahl, als eine alternative Methode zur Funktion eval() zu verwenden, ähnlich der folgenden:

//计算表达式的值
function eval(fn) {
     
    var Fn = Function;  //一个变量指向Function,防止有些前端编译工具报错
     
    return new Fn('return ' + fn)(); 
}

Infolgedessen stieß ich erneut auf eine Fehlermeldung, die der folgenden ähnelte:

Funktion kann nicht erstellt werden


Drei hilflos Aktionen

Suche nach dem WeChat-Konto Nachdem ich einige Foren nach Programmen durchsucht und das Internet umfassend durchsucht hatte, konnte ich mich nur auf die primitivsten Methoden verlassen, um ein scheinbar einfaches Taschenrechnerprogramm zu entwickeln. Zusammenfassend gibt es drei Hauptmethoden, nämlich die Konvertierungsfunktion

, die erzwungene Typkonvertierung und die schwache Typkonvertierung mithilfe von js-Variablen.


(1) Konvertierungsfunktion

js bietet zwei Konvertierungsfunktionen, parseInt() und parseFloat(). Ersteres wandelt den Wert in eine Ganzzahl um und letzteres wandelt den Wert in eine Gleitkommazahl um. Nur wenn diese Methoden für den String-Typ aufgerufen werden, können diese beiden Funktionen korrekt ausgeführt werden. Für andere Typen wird NaN (Not a Number) zurückgegeben.

Einige Beispiele sind wie folgt:

parseInt("1234blue"); //gibt 1234 zurück
parseInt("0xA"); //gibt 10 zurück
parseInt("22.5 ") ; //gibt 22 zurück
parseInt("blue"); //gibt NaN zurück


Die parseInt()-Methode verfügt auch über einen Basismodus, der kann Binär-, Oktal-, Hexadezimal- oder jede andere Basiszeichenfolge in eine Ganzzahl konvertieren. Die Basis wird durch den zweiten Parameter der parseInt()-Methode angegeben. Ein Beispiel lautet wie folgt:


Code kopieren Der Code lautet wie folgt:


parseInt(" AF", 16); //gibt 175 zurück
parseInt("10", 2); //gibt 2
parseInt("10", 8); //gibt 8 zurück
parseInt("10" , 10); //gibt 10 zurück


Wenn die Dezimalzahl führende Nullen enthält, ist es besser, die Basis 10 zu verwenden, damit Sie Erhalten Sie nicht versehentlich einen Oktalwert. Zum Beispiel:


Der Code lautet wie folgt:


parseInt("010"); //gibt 8 zurück
parseInt(" 010", 8 ); //gibt 8
parseInt("010", 10); //gibt 10


parseFloat()-Methode und parseInt zurück () Methode Die Behandlung ist ähnlich.
Ein weiterer Unterschied bei der Verwendung der Methode parseFloat() besteht darin, dass die Zeichenfolge eine Gleitkommazahl in Dezimalform darstellen muss und parseFloat() keinen Basismodus hat.

Das Folgende ist ein Beispiel für die Verwendung der parseFloat()-Methode:


Der Code lautet wie folgt:


parseFloat ("1234blue"); //gibt 1234.0 zurück
parseFloat("0xA"); //gibt NaN
parseFloat("22.5"); //gibt 22.5 zurück
parseFloat("22.34.5"); //gibt 22,34 zurück
parseFloat("0908"); //gibt 908 zurück
parseFloat("blue"); //gibt NaN zurück


(2) Erzwungene Typkonvertierung

Sie können auch Typumwandlung verwenden, um den Typ der konvertierten Werte zu verwalten. Verwenden Sie eine Umwandlung, um auf einen bestimmten Wert zuzugreifen, auch wenn dieser von einem anderen Typ ist.

Die drei Arten von Umwandlungen, die in ECMAScript verfügbar sind, sind wie folgt:


Boolean(value) – Konvertieren Sie den angegebenen Wert in einen booleschen Typ; (Wert) – Konvertieren Sie den angegebenen Wert in eine Zahl (kann eine Ganzzahl oder eine Gleitkommazahl sein);
String(Wert) – Konvertieren Sie den angegebenen Wert in eine Zeichenfolge.


Durch die Konvertierung eines Werts mit einer dieser drei Funktionen wird ein neuer Wert erstellt, der den direkt aus dem Originalwert konvertierten Wert speichert. Dies kann unbeabsichtigte Folgen haben.

Die Funktion Boolean() gibt true zurück, wenn der umzuwandelnde Wert eine Zeichenfolge, eine Zahl ungleich Null oder ein Objekt mit mindestens einem Zeichen ist (dies wird im nächsten Abschnitt erläutert). Wenn der Wert eine leere Zeichenfolge, die Zahl 0, undefiniert oder null ist, wird „false“ zurückgegeben.

Mit dem folgenden Codeausschnitt können Sie die Boolesche Typkonvertierung testen.


Der Code lautet wie folgt:

Boolean(""); //false – leere Zeichenfolge
Boolean("hi" ); / /true – nicht leere Zeichenfolge
Boolean(100); //true – Zahl ungleich Null
Boolean(null); //false – null
false – Null
Boolean(new Object()); //true – object


Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:


代码如下:


用  法          结       果

Number(false)             0
Number(true)             1
Number(undefined)         NaN
Number(null)         0
Number( "5.5 ")         5.5
Number( "56 ")         56
Number( "5.6.7 ")         NaN
Number(new Object())     NaN
Number(100) 100


(3)利用js变量弱类型转换

举个小例子,一看,就会明白了。


代码如下:

var str= '012.345 ';
var x = str-0;
x = x*1;

上例利用了js的弱类型的特点,只进行了算术运算,实现了字符串到数字的类型转换。属于最简单的方法了。


小结

本文描述的也算是个人开发微信小程序过程中遇到的一个“坑”吧。毕竟小程序的设计目的之一是要访问本机功能的,所以避开eval这样的复杂函数也是可以理解的。目前,我还没有在网络上找到可以使用后面介绍的原始方法的能够实现计算字符串中数字表达式的通用的工具函数。有兴趣的朋友可以试一下。


更多微信小程序开发之不能使用eval函数的问题相关文章请关注PHP中文网!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn