if(checkmethod=='isNumber'){
var result=eval(checkutil+'.isNumber("'+checkdata+'")' );//相当于计算UtilTest.isNumber(checkdata)
}else if(checkmethod=='isEnglish'){
result=eval(checkutil+'.isEnglish("'+checkdata+'")' );
}else if(checkmethod=='isEmail'){
result=eval(checkutil+'.isEmail("'+checkdata+'")' );
}else if(checkmethod=='isIP'){
result=eval(checkutil+'.isIP("'+checkdata+'")' );
}
以上是我在网上看到的一段代码,但为了更好的说明我举两个我理解的例子:
//例子一
var data = {name:'jack',age:12};
var example = 'my name is ' + data.name + ',my age is ' + data.age ;
//例子二
var new = "";
var p = ""
p.html(new);
所以说我能理解用引号包裹起来字符串,能理解引号中间嵌套不同的引号,可是我不理解我最初粘贴的那段代码'checkutil+'.isNumber("'+checkdata+'")',这里面checkdata旁边为什么要同时写双引号和单引号。我是这样分析的,这里面总共有三层引号的使用,首先是最外层的单引号,然后是括号里的第一层双引号,最后是连绵的单引号。
平常写代码都是乱写,能生效就行,但是真觉得这样不太好,所以想问个明白。拜托大家啦
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
题主没给出
checkutil和checkdata的类型,我只能以我自己的推倒来模拟:这时候
eval里边的字符串是:checker.isNumber("15"),是没有任何语法错误的。我们把 checkdata 改成非单纯的数字字符串:
这时候
eval里边的字符串是:checker.isNumber("15abc"),也是没有任何语法错误的。但是,如果我们将 eval 中的双引去掉:
产生异常:
checker.isNumber(15abc)中isNumber方法的参数15abc究竟是个什么类型呢?既不是有效的字面量也不是定义过的对象。所以你知道为什么会出现语法错误了吧。双引是为了确保
isNumber的参数为一个有效的对象,而双引表示的字符串一定是有效的对象。引号之间是一一配对的,就是以单(双)引号开头,就以单(双)引号结束,中间的所有内容都是字符串的内容,包括双(单)引号。
假设checkdata == '数据'
那么,'.isNumber("'+checkdata+'")'的运算结果就是:
.isNumber("数据")
需要记住:一对完整的引号内部代表字符串
ES6 有一种模板写法,不得不让你惊叫