为了账号安全,请及时绑定邮箱和手机立即绑定

js中单双引号的嵌套问题

js中单双引号的嵌套问题

慕码人2483693 2018-10-17 13:14:55
   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 = "<a href=''></a>";var div = "<div></div>"div.html(new);所以说我能理解用引号包裹起来字符串,能理解引号中间嵌套不同的引号,可是我不理解我最初粘贴的那段代码'checkutil+'.isNumber("'+checkdata+'")',这里面checkdata旁边为什么要同时写双引号和单引号。我是这样分析的,这里面总共有三层引号的使用,首先是最外层的单引号,然后是括号里的第一层双引号,最后是连绵的单引号。平常写代码都是乱写,能生效就行,但是真觉得这样不太好,所以想问个明白。拜托大家啦
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

题主没给出 checkutil 和 checkdata 的类型,我只能以我自己的推倒来模拟:

class Checker {

    isNumber(data) {

        return !isNaN(data);

    }

}


var checker = new Checker();

var checkdata = "15";

var checkutil = "checker";

var result = eval(checkutil + '.isNumber("' + checkdata + '")');


console.log(result); // 输出 true

这时候 eval 里边的字符串是:checker.isNumber("15"),是没有任何语法错误的。
我们把 checkdata 改成非单纯的数字字符串:

var checkdata = "15abc";
// ....
console.log(result); // 输出 false

这时候 eval 里边的字符串是:checker.isNumber("15abc"),也是没有任何语法错误的。

但是,如果我们将 eval 中的双引去掉:

// ...
var result = eval(checkutil + '.isNumber(' + checkdata + ')');

产生异常:

undefined:1checker.isNumber(15abc)
                 ^^SyntaxError: missing ) after argument list

checker.isNumber(15abc) 中 isNumber 方法的参数 15abc 究竟是个什么类型呢?既不是有效的字面量也不是定义过的对象。所以你知道为什么会出现语法错误了吧。
双引是为了确保 isNumber 的参数为一个有效的对象,而双引表示的字符串一定是有效的对象。


查看完整回答
反对 回复 2018-11-29
  • 1 回答
  • 0 关注
  • 1006 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信