慕碼人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條經驗 獲得超8個贊
題主沒給出 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
的參數為一個有效的對象,而雙引表示的字符串一定是有效的對象。
添加回答
舉報
0/150
提交
取消