javascript - js中单双引号的嵌套问题
怪我咯
怪我咯 2017-04-11 12:56:21
[JavaScript讨论组]
   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旁边为什么要同时写双引号和单引号。我是这样分析的,这里面总共有三层引号的使用,首先是最外层的单引号,然后是括号里的第一层双引号,最后是连绵的单引号。

平常写代码都是乱写,能生效就行,但是真觉得这样不太好,所以想问个明白。拜托大家啦

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(4)
PHPz

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

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:1
checker.isNumber(15abc)
                 ^^

SyntaxError: missing ) after argument list

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

阿神

引号之间是一一配对的,就是以单(双)引号开头,就以单(双)引号结束,中间的所有内容都是字符串的内容,包括双(单)引号。
假设checkdata == '数据'
那么,'.isNumber("'+checkdata+'")'的运算结果就是:
.isNumber("数据")

怪我咯

首先你问题里说'checkutil+'.isNumber("'+checkdata+'")',你写错了啊,人家明明是checkutil+'.isNumber("'+checkdata+'")'

看这个问题的时候首先需要明白,为什么我们需要进行单双引号的套用,主要目的我们是为了在字符串里拼接我们的变量,而单层引号则代表了字符串数据类型,从你自己的例子里我明白这个目的你是明白的。那么我们来分析问题

checkutil+'.isNumber("'+checkdata+'")'这里首先,checkutil是一个变量,因此我们checkutil+''是没有问题的,然后接着看,checkutil+'.isNumber("")'很显然这样拼接出来的字符串是xxisNumber(""),这里也就没毛病了,然后接着看由于又需要拼接一个变量,所以在字符串内,拼接数据,因为这里"",需要保留,那么显然需要再次利用单引号来接入数据checkutil+'.isNumber("'+checkdata+'")'

需要记住:一对完整的引号内部代表字符串

黄舟

ES6 有一种模板写法,不得不让你惊叫

var a = 123;

var b = `${a}`;

alert(b);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号