eval[] là một hàm toàn cục trong JavaScript để đánh giá một chuỗi được chỉ định dưới dạng mã JavaScript và thực thi nó
eval["alert['this is executed by eval[]']"];
Hàm eval[] cũng có thể gọi hàm và nhận được kết quả như hình bên dưới
var result;
function Sum[val1, val2]
{
return val1 + val2;
}
eval["result = Sum[5, 5];"];
alert[result];
eval có thể chuyển đổi chuỗi thành đối tượng JSON
var str = '[{"firstName":"Bill","lastName":"Gates"}]';
var obj = eval[str];
obj.firstName; // Bill
sự giới thiệu
Không nên sử dụng eval[] vì nó chậm, không an toàn và khiến mã không thể đọc được và không thể bảo trì
Tôi đang tìm cách chuyển đổi chuỗi thành lệnh gọi hàm mà không cần sử dụng eval. Lý do cho điều này là tôi đang sử dụng Json để lưu trữ Quy tắc định giá thẩm định và đôi khi quy tắc này phức tạp đến mức nó phải nằm trong một chức năng chuyên dụng. Vì vậy, tôi quyết định chỉ sử dụng chức năng tiêu chuẩn với hai tham số. Quy tắc sẽ giống như sau
{
clients: ["Client 1", "Client 4", "Client 3"],
riskKey: "Risk_Key_XYZ",
riskCriteriaTempl: "['{0}' === 'Full' && '{1}' === 'No']",
riskRuleFields: ["FORM_TYPE", "other_land_conforms"],
highlightFields: [1],
riskProcessFunc: "xyz_function[]",
riskFuncFields: {field1:"field1", field2:"field2"},
riskLevel: "High",
riskName_en: "Risk Name English",
riskName_fr: "Risk Name French",
}
Vì vậy, về cơ bản, thuộc tính "riskProcessFunc" sẽ có tên hàm và thay vì sử dụng định dạng này
{
rủi roQuy trìnhChức năng. function [riskFields] {return xyz_function[this, riskFields]}
}
Tôi sẽ sử dụng định dạng đơn giản hóa này để sau đó có thể dễ dàng lưu trữ trong Cơ sở dữ liệu hoặc Trang tính Excel
{
rủi roQuy trìnhChức năng. "xyz_function[]"
}
Để làm cho nó rõ ràng, sử dụng mẫu dưới đây
function complexRule_xyz[a, b] {
console.println["It is working: " + a + ", " + b];
return "Yes!";
}
var funcName = "complexRule_xyz";
var myFn1 = new Function["p1", "p2", "return p1 + ', ' + p2"];
var myFn2 = new Function["p1", "p2", "return " + funcName + "[p1, p2]"];
var myFn3 = eval[funcName];
myFn1["po", "we"];
myFn2["er", "rt"]
myFn3["tr", "yu"];
Hãy thử thực hiện thao tác trên bằng Bảng điều khiển [ctrl-j] trong Adobe Acrobat và bạn sẽ thấy rằng "myFn2[]" sẽ không hoạt động. Tốt nhất là sử dụng "eval[]"
Vì vậy, giới thiệu. đến bài viết trên, điểm mấu chốt là làm thế nào để sử dụng đối tượng "cửa sổ" từ Adobe LiveCycle Designer Javascript?
Trong bài viết này, chúng ta sẽ gọi một hàm từ chuỗi được lưu trữ trong một biến. Có hai phương pháp để gọi một hàm từ một chuỗi được lưu trữ trong một biến.
- Sử dụng phương pháp đối tượng cửa sổ
- Sử dụng phương thức eval[]
Ghi chú. Phương thức eval[] cũ hơn và không được dùng nữa.
Phương pháp 1. Sử dụng đối tượng cửa sổ
Đối tượng cửa sổ trong HTML 5 tham chiếu đến cửa sổ hiện tại và tất cả các mục chứa trong đó. Do đó chúng ta có thể sử dụng nó để chạy một hàm trong một chuỗi cùng với các tham số cho hàm.
cú pháp
window[functionName][parameters]
Thí dụ. Ví dụ này giải thích cách tiếp cận được sử dụng ở trên
html
GeeksforGeeks
eval[stringFunction]0_______21_______
>
eval[stringFunction]3
eval[stringFunction]8
eval[stringFunction]3
eval[stringFunction]3
"color: green"
9
>
0>
1
>
2>
3
>
5
>
6
>
8
>
0
0
>
0
2
>
0
4
>
5
eval[stringFunction]0_______24_______3
>
đầu ra
Phương pháp 2. Sử dụng phương thức eval[]
Phương thức khác có thể được sử dụng là phương thức eval[]. Chuỗi có thể được truyền vào hàm có thể bao gồm một biểu thức JavaScript, câu lệnh hoặc một chuỗi các câu lệnh. Nó cũng có thể có các biến và thuộc tính của các đối tượng hiện có. Vấn đề duy nhất với phương pháp này là nó được coi là không an toàn và có thể không được hỗ trợ bởi các trình duyệt mới hơn.