javascript使用eval或者new Function進行語法檢查

來源:互聯網
上載者:User

使用new Function( ) 來進行語法檢查
eval( ) 方法是不能亂用的,在不適當的時候使用eval( ) 方法可能導致整個程式都會出問題的;
而new Function( ) 就沒這麼大問題。雖然new Function( ) 在任何情況下,構造的函數都是在全域範圍下直接工作的,但只作語法檢查的話,並不會因為範圍問題而產生意外結果,只要你不直接調用通過它構造的新函數。

在eval( ) 接受的參數前面增加“0,”
其實這是由於IE中存在一個bug。出於某種原因,如果你在IE 中想通過調用eval( ) 來動態地構造一個函數。
例如:
eval('(function(){ /* code here */ })');
在IE 中得到的返回將是undefined,而其它瀏覽器則會正確地返回這個新構造的函數的引用。
最簡單有效解決辦法是:在前邊加上“0,”,這樣就能在所有主流瀏覽器中相容。
例如:
eval('0,function(){ /* code here */ }');
註:在IE9 的Chakra 引擎中,這個問題已經解決。

使用數組對象的concat方法來產生新數組
把單個對象參數轉化為只包含一個元素的數組再來處理,可以使用“[ ].concat(o)”的形式。
例如: 複製代碼 代碼如下:var arr1 = [1,2];
var arr2 = [3,4];
var arr3 = arr1.concat(arr2);
alert(arr3.length);

另一種方式是:if (!(o instanceof Array)) o = [o];
// 和ECMAScript 5 中的isArray 相比不夠嚴謹。

網友回複:
1.eval 確實不能亂用;
2.在IE eval 的時候,我的解決方案是在執行函數體內return ;
3.Array.prototype.concat.apply([1,2,3],[4,5,6]);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.