CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài blog CFSDN này giới thiệu cách sử dụng hàm eval() trong JavaScript, được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Trong JavaScript, bạn có thể sử dụng hàm eval() để phân tích mã JavaScript trong một chuỗi và trả về kết quả thực thi mã tương ứng:
。
Sao chép mã Mã này như sau:
console.log(eval("42 * 2"));//84
。
Về cơ bản, eval() là một hàm của đối tượng toàn cục JavaScript. Ví dụ: đoạn mã trên tương đương với:
。
Sao chép mã Mã này như sau:
console.log(this.eval("42 * 2"));//84
。
Tuy nhiên, khi sử dụng câu lệnh eval(), phương pháp đầu tiên ở trên thường được áp dụng, nghĩa là bỏ qua đối tượng chung và sử dụng trực tiếp eval().
。
Sử dụng eval().
。
Vì hai lý do sau, bạn nên cố gắng tránh sử dụng câu lệnh eval() trong mã của mình trừ khi bạn thực sự cần nó:
1. Về mặt logic, các chuỗi nên được sử dụng để lưu trữ nội dung và thông tin trong quá trình chạy chương trình, không nên sử dụng để lưu trữ logic tính toán cụ thể. 2. Vì tham số eval() là một chuỗi và chuỗi không thể được xử lý từ vựng nên trình thông dịch JavaScript không thể tối ưu hóa câu lệnh gọi eval().
。
Giá trị trả về của eval().
。
Giá trị trả về của eval() tuân theo các quy tắc sau:
。
1. Nếu tham số của eval() không phải là một chuỗi thì eval() sẽ trả về trực tiếp tham số đó. 2. Nếu tham số của eval() là một chuỗi thì eval() sẽ phân tích chuỗi đó thành mã và thực thi nó, đồng thời trả về kết quả của dòng thực thi mã cuối cùng. 3. Nếu không thể phân tích chuỗi thành mã hợp pháp, eval() sẽ đưa ra Lỗi Cú pháp. 4. Nếu chuỗi có thể được phân tích cú pháp thành mã hợp pháp, nhưng có lỗi được báo cáo trong quá trình thực thi mã này, thì lỗi sẽ được báo cáo tới câu lệnh eval() và được ném ra bởi eval().
。
。
Sao chép mã Mã này như sau:
console.log(eval([1,2,3]));//[1, 2, 3]
console.log(typeof eval([1,2,3]));//đối tượng
。
console.log(eval("42 */ 2"));//SyntaxError console.log(eval("42 * 2; 22 * 3;"));//66. eval trả về kết quả của biểu thức/câu lệnh cuối cùng console.log(eval("null.toString()"));//TypeError, ngoại lệ trong mã được đánh giá sẽ được truyền ra bên ngoài eval().
。
。
Môi trường biến đổi.
。
Có một tính năng quan trọng của eval() trong JavaScript: mã trong chuỗi tham số eval() có thể truy cập các biến trong mã bên ngoài và nó cũng có thể hiển thị các biến mới được tạo trong mã chuỗi tham số sang mã bên ngoài. Tức là, nếu chuỗi tham số eval() có thể được phân tích cú pháp một cách hợp pháp, thì JS sẽ thay thế dòng chứa eval() bằng mã được phân tích cú pháp:
。
。
Sao chép mã Mã này như sau:
//môi trường biến
var a = 108;
console.log(eval("hàm double(x){trả về x*2;} a = double(a)"));
console.log(a);//216
console.log(double(33));//66
。
Điều đáng lưu ý là điều kiện tiên quyết để hiện thực hóa các tính năng trên là mã trong chuỗi tham số eval() có thể được phân tích cú pháp hợp pháp. Ngoài cú pháp mã đúng, JS còn yêu cầu mã trong chuỗi tham số eval() phải "khép kín": mã phải chỉ có ý nghĩa đối với mã trong chuỗi tham số. Ví dụ: bạn không thể truyền một chuỗi như "return;" vào hàm eval():
。
Sao chép mã Mã này như sau:
hàm kiểm tra(){
var s = "kiểm tra";
eval("trả về s;");
}
test();//SyntaxError: return không có trong hàm
。
Nếu hàm eval() được sử dụng trực tiếp, thì các biến được mã truy cập trong chuỗi tham số eval() là các biến của hàm nơi đặt câu lệnh eval(), tức là môi trường biến được sử dụng bởi eval() chức năng là "môi trường biến cục bộ". Nếu bạn không sử dụng trực tiếp hàm eval() mà sử dụng một biến mới cũng trỏ đến hàm eval() thì các biến được mã truy cập trong chuỗi tham số tương ứng là các biến toàn cục, tức là các biến được sử dụng bởi hàm eval() Môi trường là "môi trường biến toàn cục":
。
Sao chép mã Mã này như sau:
//biến cục bộ environment và biến toàn cục environment
var đổi tên = eval;
var x = "nguồn gốc", y = "nguồn gốc";
hàm f(){
var x = "mới";
eval("x += 'Đã thay đổi';");
trả về x;
}
hàm g(){
var y = "mới";
đổi tên("y += 'Đã thay đổi';");
trả về y;
}
console.log(f(), x);//nguồn gốc mới thay đổi
console.log(g(), y);//nguồn gốc mới đã thay đổi
。
Tuy nhiên, điều đáng chú ý là hành vi trong IE6, 7 và 8 là khác nhau. Trong IE6, 7 và 8, ngay cả khi hàm eval() được đổi tên, "môi trường biến cục bộ" vẫn được sử dụng.
Cuối cùng, bài viết giới thiệu cách sử dụng hàm eval() trong JavaScript kết thúc tại đây. Nếu bạn muốn biết thêm về phần giới thiệu cách sử dụng hàm eval() trong JavaScript, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục. duyệt các bài viết liên quan tôi hy vọng tất cả các bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!