var foo = "function(){ alert('meee'); }";
foo();
Tôi đã thử ở trên nhưng nó không hoạt động là có cách nào khác để thực thi hàm đó mà không sử dụng eval?thay đổi chuỗi thành hàm trong javascript (không phải eval)
thnx
var foo = "function(){ alert('meee'); }";
foo();
Tôi đã thử ở trên nhưng nó không hoạt động là có cách nào khác để thực thi hàm đó mà không sử dụng eval?thay đổi chuỗi thành hàm trong javascript (không phải eval)
thnx
bạn muốn sử dụng trực tiếp một nhà xây dựng Function
, như Anders cho biết. Tất cả các đối số là chuỗi. Đối số cuối cùng là phần thân của hàm, bất kỳ đối số đầu tiên nào cũng là tên của các đối số mà hàm nhận được.
Để mượn từ ví dụ Anders',
var multiply = new Function("x", "y", "return x * y");
sẽ như thế nào viết
var multiply = function (x,y) {
return x * y
}
Trong trường hợp của bạn, bạn có "function(){ alert('meee'); }"
và bạn muốn lưu nó như là một chức năng để var foo
.
var fn = "function(){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"
Sự khác biệt giữa Function
và eval
là eval
chạy trong phạm vi cá nhân, trong khi Function
chạy trong phạm vi toàn cầu.
var x="haha", y="hehe";
function test() {
var x=15, y=34;
eval("alert('eval: ' + x + ', ' + y)");
new Function("alert('Func: ' + x + ', ' + y)")();
}
test();
// eval: 15, 34
// Func: haha, hehe
Đừng cố gắng chạy nó trong bảng điều khiển, bạn sẽ nhận được kết quả lừa dối (bàn giao tiếp sử dụng eval
). Viết nó trong một thẻ <script>
và tải nó trong trình duyệt sẽ cho kết quả thực sự.
không phải cách mà hàm tạo' Hàm' tạo ra hàm này giống như cách 'eval' thực hiện. nó thực sự chỉ là một dạng 'eval' khác, vì vậy tất cả điều này thực sự là tránh sử dụng từ' eval'. nhưng bạn cũng có thể làm điều đó như 'cửa sổ [(typeof [] [0]) [3] +" val "] (" 4 + 3 ")', cung cấp '7'. – Claudiu
tôi phải nhắc lại. bạn nói rằng bạn đang sợ tiêm script hoặc những người ăn cắp mật khẩu của bạn nếu bạn sử dụng 'eval'. tốt, ** NÀY LÀ SỬ DỤNG EVAL ** !!! đó là điều tương tự - mã tùy ý đang được JS biên soạn và chạy. tại sao bạn muốn người dùng có thể cung cấp các chức năng của riêng họ cho mã của bạn? – Claudiu
không mà tôi biết ... có thể là một cách tốt hơn để làm những gì bạn đang cố gắng làm mà không làm cho mình dễ bị một cuộc tấn công tiêm kịch bản mà không liên quan đến thông qua xung quanh javascript như một chuỗi.
Tôi biết :) tôi đã tìm kiếm rất nhiều về điều này nhưng tôi cần một an toàn như tôi đã đọc về eval cũng cho phép chỉ nói tôi có ấn tượng rằng bạn có thể cung cấp tên người dùng và mật khẩu cho mọi người hoặc xóa mọi thứ urself :) – Val
nó thực sự phụ thuộc vào nơi javascript của bạn đến từ đâu? nếu nó nằm trong một cơ sở dữ liệu và cách duy nhất các chuỗi mã có được trong đó là bởi một biểu mẫu an toàn hoặc những gì có bạn, bạn có thể ok. Mặt khác, nếu bạn đang cho phép bất cứ ai đặt mã thực thi tùy ý vào chương trình phụ trợ của bạn, bạn có thể đang gặp rắc rối. Hầu hết các cuộc tấn công javascript tôi có thể thụ thai là chủ yếu sẽ ảnh hưởng đến sự tương tác của người dùng, thay vì cơ sở dữ liệu của bạn. Những gì bạn đang ám chỉ có lẽ là một kịch bản ghi nhật ký bàn phím và gửi chúng đến một trang web từ xa thông qua các bài viết xhr hoặc tương tự. – vicatcu
từ phần tử html innerhtml .. – Val
Theo MDC. Sử dụng:
var multiply = new Function("x", "y", "return x * y");
var theAnswer = multiply(7, 6);
Tôi chắc chắn tôi đã không yêu cầu cho một bài học toán học. tất cả những gì tôi muốn là tạo một chuỗi chứa hàm như văn bản và gọi nó. nó dễ sử dụng eval, không an toàn và rất chậm. – Val
@Val, đây là ví dụ về những gì bạn nên sử dụng, đọc trang tham khảo. – Anders
Tôi đề nghị bạn nên đọc lại nó khi nó nói thuộc tính ...'arguments Không được chấp nhận' và' arity deprecated ' – Val
Nếu bạn có thể cụ thể hơn về vấn đề của mình, có thể là một giải pháp thay thế cho phương pháp này mà bạn không cần sử dụng eval. – rfunduk
cũng 'function() {alert ('mee');}' là một văn bản đã quản lý để nắm bắt bây giờ tôi cần phải gọi chức năng ... tôi nghĩ rằng ví dụ trên hoạt động trên php thats có lẽ làm thế nào tôi có ý tưởng ... do đó chức năng được lấy từ một '