以上就是给各位分享在JavaScript中计算字符串值,而不使用eval,其中也会对javascript计算字符串的长度进行解释,同时本文还将给你拓展javascript–不使用eval()绘制图形、
以上就是给各位分享在JavaScript中计算字符串值,而不使用eval,其中也会对javascript计算字符串的长度进行解释,同时本文还将给你拓展javascript – 不使用eval()绘制图形、javascript – 如何在不使用eval()的情况下将数组内容用作变量?、javascript – 有人可以解释JSON解析器如何工作而不使用eval吗?、Javascript 计算字符串在localStorage中所占字节数_javascript技巧等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 在JavaScript中计算字符串值,而不使用eval(javascript计算字符串的长度)
- javascript – 不使用eval()绘制图形
- javascript – 如何在不使用eval()的情况下将数组内容用作变量?
- javascript – 有人可以解释JSON解析器如何工作而不使用eval吗?
- Javascript 计算字符串在localStorage中所占字节数_javascript技巧
在JavaScript中计算字符串值,而不使用eval(javascript计算字符串的长度)
有没有一种方法可以在不使用JavaScript的情况下计算存储在字符串中的公式eval
?
通常我会做类似的事情
var apa = "12/5*9+9.4*2";alert(eval(apa));
那么,有人知道eval
吗?
答案1
小编典典这正是您应该使用eval的地方,否则您将不得不遍历字符串并生成数字。您将必须使用isNaN方法来执行此操作。
javascript – 不使用eval()绘制图形
我创建了一个Chrome扩展程序,可以绘制用户输入的数学公式的图形.为了轻松获得y的值,我使用了eval()(是的,我知道它很糟糕),因为它是实现它的最简单方法.
var equ = $("#equ1").val(); //some element
//let's say equ = "2(2^x) + 3x"
//some magic code
//equ becomes "2*(pow(2,x))+3*x"
for(var x = -10; x < 10; x++){
var y = eval(equ.replace(/x/ig, x)); //cal@R_301_6092@te y value
drawPoint(x, y);
}
console.log("Graphing done.");
但是,由于new manifest version 2,我不能再使用eval了.我想不出任何操纵字符串的方法.任何的想法?
解决方法:
干净的方式:您可以尝试使用Jison解析表达式并从输入字符串构建AST.然后,将函数与AST节点相关联,该节点将节点表示的操作应用于给予它们的数据.这意味着您必须在语法和节点代码中明确地放置您想要支持的每个数学表达式,但另一方面,这也可以更容易地支持JS不支持的数学运算符.如果你愿意投入一些时间,这可能就是你要走的路.
肮脏的方式:如果您的扩展程序在普通网站上使用,您可以通过注入< script>来进行某种间接评估.元素进入网站左右 – 然而,这可能是不安全的.
javascript – 如何在不使用eval()的情况下将数组内容用作变量?
我有一个存储在数组中的变量或变量名列表.我想在循环中使用它们,但我不想使用eval().我该怎么做呢?如果我将值存储在带引号的数组中,我必须在任何等式的右侧使用eval()来呈现值.如果我只存储变量名称,我以为我将存储实际变量,但它不能正常工作.
$(data.xml).find('Question').each(function(){
var answer_1 = $(this).find("Answers_1").text();
var answer_2 = $(this).find("Answers_2").text();
var answer_3 = $(this).find("Answers_3").text();
var answer_4 = $(this).find("Answers_4").text();
var theID = $(this).find("ID").text();
var theBody = $(this).find("Body").text();
var answerArray = new Array();
answerArray = [answer_1,answer_2,answer_3,answer_4,theID,theBody]
for(x=0;x<=5;x++) {
testme = answerArray[x];
alert("looking for = " + answerArray[x] + ", which is " + testme)
}
});
解决方法:
您可以将值本身放在数组中:
var answers = [
$(this).find("Answers_1").text(),
$(this).find("Answers_2").text(),
$(this).find("Answers_3").text(),
$(this).find("Answers_4").text()
];
for(x=0;x<=5;x++) {
alert("looking for = " + x + ", which is " + answers[x])
}
编辑:甚至
var answers = $(this)
.find("Answers_1, Answers_2, Answers_3, Answers_4")
.map(function() { return $(this).text(); })
.get();
如果您的答案共享一个公共类,您可以将选择器更改为$(this).find(‘.AnswerClass’).
如果需要变量名,可以使用关联数组:
var thing = {
a: "Hello",
b: "World"
};
var name = 'a';
alert(thing[name]);
javascript – 有人可以解释JSON解析器如何工作而不使用eval吗?
编辑:有人可以提供一个关于如何将树结构转换为对象的简单示例吗?
解决方法
var txt='[\'one\',\'two\']'; var re1='(\\[)'; // Any Single Character 1 var re2='(\\\'.*?\\\')'; // Single Quote String 1 var re3='(,)'; // Any Single Character 2 var re4='(\\\'.*?\\\')'; // Single Quote String 2 var re5='(\\])'; // Any Single Character 3 var p = new RegExp(re1+re2+re3+re4+re5,["i"]); var m = p.exec(txt); if (m != null) { var c1=m[1]; var s1=m[2]; var c2=m[3]; var s2=m[4]; var c3=m[5]; return [s1,s2]; } return null;
是的,这是一种可怕的方式来做到这一点,但它做了它声称的那个字符串:p
Javascript 计算字符串在localStorage中所占字节数_javascript技巧
最近项目有个需求要用js计算一串字符串写入到localstorage里所占的内存,众所周知的,js是使用unicode编码的。而unicode的实现有n种,其中用的最多的就是utf-8和utf-16。因此本文只对这两种编码进行讨论。
下面这个定义摘自维基百科(http://zh.wikipedia.org/zh-cn/UTF-8),做了部分删减。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,可以表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII相容,使用一至四个字节为每个字符编码
其编码规则如下:
字符代码在000000 – 00007F之间的,用一个字节编码;
000080 – 0007FF之间的字符用两个字节;
000800 – 00D7FF 和 00E000 – 00FFFF之间的用三个字节,注: Unicode在范围 D800-DFFF 中不存在任何字符;
010000 – 10FFFF之间的用4个字节。
而UTF-16 则是定长的字符编码,大部分字符使用两个字节编码,字符代码超出 65535 的使用四个字节,如下:
立即学习“Java免费学习笔记(深入)”;
000000 – 00FFFF 两个字节;
010000 – 10FFFF 四个字节。
一开始认为既然页面用的是UTF-8编码,那么存入localStorage的字符串,应该也是用UTF-8编码的。但后来测试发现,明明计算出的size是不到5MB,存入localStorage却抛异常了。想了想,页面的编码是可以改的。如果localStorage按照页面的编码存字符串,不就乱套了?浏览器应该都是使用UTF-16编码的。用UTF-16编码计算出5MB的字符串,果然顺利写进去了。超过则失败了。
好了,附上代码实现。计算规则就是上面写的,为了计算速度,把两个for循环分开写了。
/** * 计算字符串所占的内存字节数,默认使用UTF-8的编码方式计算,也可制定为UTF-16 * UTF-8 是一种可变长度的 Unicode 编码格式,使用一至四个字节为每个字符编码 * * 000000 - 00007F(128个代码) 0zzzzzzz(00-7F) 一个字节 * 000080 - 0007FF(1920个代码) 110yyyyy(C0-DF) 10zzzzzz(80-BF) 两个字节 * 000800 - 00D7FF 00E000 - 00FFFF(61440个代码) 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz 三个字节 * 010000 - 10FFFF(1048576个代码) 11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz 四个字节 * * 注: Unicode在范围 D800-DFFF 中不存在任何字符 * {@link http://zh.wikipedia.org/wiki/UTF-8} * * UTF-16 大部分使用两个字节编码,编码超出 65535 的使用四个字节 * 000000 - 00FFFF 两个字节 * 010000 - 10FFFF 四个字节 * * {@link http://zh.wikipedia.org/wiki/UTF-16} * @param {String} str * @param {String} charset utf-8, utf-16 * @return {Number} */ var sizeof = function(str, charset){ var total = 0, charCode, i, len; charset = charset ? charset.toLowerCase() : ''''; if(charset === ''utf-16'' || charset === ''utf16''){ for(i = 0, len = str.length; i < len; i++){ charCode = str.charCodeAt(i); if(charCode <= 0xffff){ total += 2; }else{ total += 4; } } }else{ for(i = 0, len = str.length; i < len; i++){ charCode = str.charCodeAt(i); if(charCode <= 0x007f) { total += 1; }else if(charCode <= 0x07ff){ total += 2; }else if(charCode <= 0xffff){ total += 3; }else{ total += 4; } } } return total; }
今天关于在JavaScript中计算字符串值,而不使用eval和javascript计算字符串的长度的分享就到这里,希望大家有所收获,若想了解更多关于javascript – 不使用eval()绘制图形、javascript – 如何在不使用eval()的情况下将数组内容用作变量?、javascript – 有人可以解释JSON解析器如何工作而不使用eval吗?、Javascript 计算字符串在localStorage中所占字节数_javascript技巧等相关知识,可以在本站进行查询。
本文标签: