Hướng dẫn method evaluates a string of javascript code in the context of the specified object - phương thức đánh giá một chuỗi mã javascript trong ngữ cảnh của đối tượng được chỉ định
Show
Tùy chọn - Eval - Parsedoule - Parseobject - EFLOAT Câu trả lời đúng: Eval
Tùy chọn - Eval - Parsedoule - Parseobject - EFLOAT
Viết ý kiến của bạn Please enter the code shown above (Note: If you cannot read the numbers in the above image, reload the page to generate a new one.) Cảnh báo: Thực hiện JavaScript từ một chuỗi là một rủi ro bảo mật khổng lồ. Một diễn viên xấu là quá dễ dàng để chạy mã tùy ý khi bạn sử dụng Hàm 6 đánh giá mã JavaScript được biểu thị dưới dạng chuỗi và trả về giá trị hoàn thành của nó. Nguồn được phân tích cú pháp như một kịch bản. 6 function evaluates JavaScript code represented as a string and returns its
completion value. The source is parsed as a script.Thử nóCú phápThông số 8Một chuỗi đại diện cho một biểu thức, câu lệnh hoặc chuỗi câu lệnh JavaScript. Biểu thức có thể bao gồm các biến và thuộc tính của các đối tượng hiện có. Nó sẽ được phân tích cú pháp như một tập lệnh, do đó, các khai báo ____29 (chỉ có thể tồn tại trong các mô -đun) không được phép. Giá trị trả vềGiá trị hoàn thành của việc đánh giá mã đã cho. Nếu giá trị hoàn thành trống, 0 sẽ được trả về.Sự mô tả 6 là một thuộc tính chức năng của đối tượng toàn cầu.Đối số của hàm 6 là một chuỗi. Nó sẽ đánh giá chuỗi nguồn là một cơ thể tập lệnh, có nghĩa là cả hai câu và biểu thức đều được cho phép. Nó trả về giá trị hoàn thành của mã. Đối với các biểu thức, đó là giá trị mà biểu thức đánh giá. Nhiều tuyên bố và khai báo cũng có giá trị hoàn thành, nhưng kết quả có thể đáng ngạc nhiên (ví dụ: giá trị hoàn thành của một gán là giá trị được gán, nhưng giá trị hoàn thành của 3 không được xác định), do đó, bạn nên không dựa vào các câu lệnh ' hoàn thành giá trị.Có hai chế độ của các cuộc gọi 6: eval trực tiếp và eval. Chỉ số trực tiếp chỉ có một dạng: 5 (tên của hàm được gọi là 6 và giá trị của nó là hàm 6 toàn cầu). Mọi thứ khác, bao gồm cả việc gọi nó thông qua một biến bí danh, thông qua truy cập thành viên hoặc biểu thức khác hoặc thông qua toán tử 8 chuỗi tùy chọn, là gián tiếp.
Eval Eval có thể được nhìn thấy như thể mã được đánh giá trong một thẻ 9 riêng biệt. Điều này có nghĩa là:
Trong chế độ nghiêm ngặt, khai báo một biến có tên 6 hoặc gán lại 6 là 0.
Nếu đối số của 6 không phải là một chuỗi, 6 sẽ trả lại đối số không thay đổi. Trong ví dụ sau, hàm tạo 3 được chỉ định và 6 trả về một đối tượng 3 thay vì đánh giá chuỗi.
Bạn có thể làm việc xung quanh giới hạn này một cách chung chung bằng cách sử dụng 6.
Không bao giờ sử dụng eval ()!
6 là một chức năng nguy hiểm, thực thi mã mà nó được thông qua với các đặc quyền của người gọi. Nếu bạn chạy 6 với một chuỗi có thể bị ảnh hưởng bởi một bên độc hại, bạn có thể sẽ chạy mã độc trên máy của người dùng với quyền của trang web / tiện ích mở rộng của bạn. Quan trọng hơn, mã của bên thứ ba có thể thấy phạm vi mà 6 đã được gọi (nếu đó là một đánh giá trực tiếp), điều này có thể dẫn đến các cuộc tấn công có thể theo cách mà 0 tương tự không dễ bị ảnh hưởng.
6 cũng chậm hơn so với các lựa chọn thay thế, vì nó phải gọi trình thông dịch JavaScript, trong khi nhiều cấu trúc khác được tối ưu hóa bởi các động cơ JS hiện đại.Ngoài ra, các phiên dịch viên JavaScript hiện đại chuyển đổi JavaScript thành mã máy. Điều này có nghĩa là bất kỳ khái niệm đặt tên biến bị xóa sổ. Do đó, bất kỳ việc sử dụng 6 nào cũng sẽ buộc trình duyệt thực hiện tra cứu tên biến đắt tiền dài để tìm ra nơi biến tồn tại trong mã máy và đặt giá trị của nó. Ngoài ra, những điều mới có thể được giới thiệu cho biến đó thông qua 6, chẳng hạn như thay đổi loại biến đó, buộc trình duyệt phải đánh giá lại tất cả các mã máy được tạo để bù.May mắn thay, có một sự thay thế rất tốt cho 6: sử dụng hàm tạo 0. Mã xấu với 6:
Mã tốt hơn mà không cần 6: 0Hai đoạn mã ở trên dường như hoạt động theo cùng một cách, nhưng chúng không; 6 là một sự chậm hơn rất nhiều. Thông báo 9 trong chuỗi được đánh giá. Trong chức năng không có 6, đối tượng đang được đánh giá trong phạm vi toàn cầu, do đó, trình duyệt an toàn cho rằng 1 đề cập đến 2 thay vì biến cục bộ gọi là 1. Tuy nhiên, trong mã sử dụng 6, trình duyệt không thể giả định điều này. Ví dụ: trong mã sau, 1 trong chuỗi được đánh giá không đề cập đến 2. 1Do đó, trong phiên bản 6 của mã, trình duyệt buộc phải thực hiện cuộc gọi tra cứu đắt tiền để kiểm tra xem liệu có bất kỳ biến cục bộ nào được gọi là 8 không. Điều này là vô cùng không hiệu quả so với 9.Trong một trường hợp liên quan, nếu bạn thực sự muốn chức năng 8 của mình được gọi từ mã bên trong 9, bạn có nên dễ dàng thoát ra và sử dụng 6 không? Không! Không bao giờ. Thay vào đó, hãy thử cách tiếp cận dưới đây. 2Mã ở trên có vẻ không hiệu quả chậm vì hàm tăng gấp ba, nhưng hãy phân tích lợi ích của phương pháp hiệu quả ở trên:
Cuối cùng, hãy kiểm tra Minification. Với việc sử dụng 9 như được hiển thị ở trên, bạn có thể thu nhỏ chuỗi mã được chuyển đến 3 hiệu quả hơn nhiều vì các tên đối số chức năng có thể được thu nhỏ như trong mã được thu nhỏ bên dưới. 3Ngoài ra còn có các lựa chọn thay thế an toàn hơn (và nhanh hơn!) Cho 6 hoặc 9 cho các trường hợp sử dụng phổ biến.Sự khác biệt giữa 6 và 9 là chuỗi nguồn được chuyển đến 9 được phân tích cú pháp như cơ thể chức năng, không phải là một tập lệnh. Có một vài sắc thái - ví dụ, bạn có thể sử dụng các câu lệnh 4 trong một cơ thể chức năng nhưng không phải trong một kịch bản. Trong trường hợp bạn có ý định phân tích nội dung dưới dạng tập lệnh, sử dụng EDIRECT EVAL và Buộc chế độ nghiêm ngặt có thể là một giải pháp thay thế an toàn khác. 4Bằng cách này, mã được đánh giá không có quyền truy cập vào phạm vi cục bộ và không thể xác định các biến toàn cầu. Truy cập thuộc tính thành viênBạn không nên sử dụng 6 để chuyển đổi tên thuộc tính thành thuộc tính. Hãy xem xét ví dụ sau đây không được biết đến thuộc tính của đối tượng không được truy cập cho đến khi mã được thực thi. Điều này có thể được thực hiện với 6: 5Tuy nhiên, 6 là không cần thiết ở đây. Trong thực tế, việc sử dụng nó ở đây là không được khuyến khích. Thay vào đó, hãy sử dụng các truy cập tài sản, nhanh hơn và an toàn hơn nhiều: 6Bạn thậm chí có thể sử dụng phương pháp này để truy cập các thuộc tính hậu duệ. Sử dụng 6 Điều này trông giống như: 7Tránh 6 ở đây có thể được thực hiện bằng cách phân tách đường dẫn thuộc tính và lặp qua các thuộc tính khác nhau: 8Đặt một thuộc tính theo cách đó hoạt động tương tự: 9Sử dụng các chức năng thay vì đánh giá các đoạn mãJavaScript có các chức năng hạng nhất, có nghĩa là bạn có thể chuyển các hàm dưới dạng đối số cho các API khác, lưu trữ chúng trong các thuộc tính của biến và đối tượng, v.v. Nhiều API DOM được thiết kế với tâm trí này, vì vậy bạn có thể (và nên) viết: 0Việc đóng cũng hữu ích như một cách để tạo các hàm được tham số hóa mà không cần nối các chuỗi. Phân tích cú pháp JSON (chuyển đổi chuỗi thành các đối tượng JavaScript)Nếu chuỗi bạn đang gọi 6 trên có chứa dữ liệu (ví dụ: một mảng: 01), trái ngược với mã, bạn nên xem xét chuyển sang JSON, cho phép chuỗi sử dụng một tập hợp con của cú pháp JavaScript để thể hiện dữ liệu.Lưu ý rằng vì cú pháp JSON bị hạn chế so với cú pháp JavaScript, nên nhiều chữ JavaScript hợp lệ sẽ không phân tích thành JSON. Ví dụ, dấu phẩy kéo dài không được phép trong JSON và tên tài sản (khóa) trong nghĩa đen đối tượng phải được đặt trong các trích dẫn. Hãy chắc chắn sử dụng trình tự kiểm tra JSON để tạo các chuỗi mà sau này sẽ được phân tích cú pháp dưới dạng JSON. Truyền dữ liệu thay vì mãVí dụ: một tiện ích mở rộng được thiết kế để cạo nội dung của các trang web có thể có các quy tắc cạo được xác định trong XPath thay vì mã JavaScript. Ví dụSử dụng eval ()Trong mã sau, cả hai câu lệnh có chứa 6 trả về 42. Đầu tiên đánh giá chuỗi 03; Thứ hai đánh giá chuỗi 04. 1Eval () Trả về giá trị hoàn thành của các câu lệnh 6 Trả về giá trị hoàn thành của các câu lệnh. Đối với 06, nó sẽ là biểu thức hoặc tuyên bố cuối cùng được đánh giá. 2Ví dụ sau sử dụng 6 để đánh giá chuỗi 08. Chuỗi này bao gồm các câu lệnh JavaScript gán 09 giá trị 42 nếu 10 là năm và gán 0 cho 09 nếu không. Khi câu lệnh thứ hai được thực thi, 6 sẽ khiến các câu lệnh này được thực hiện và nó cũng sẽ đánh giá tập hợp các câu lệnh và trả về giá trị được gán cho 09, vì giá trị hoàn thành của một gán là giá trị được gán. 3Nếu bạn gán nhiều giá trị thì giá trị cuối cùng được trả về. 4eval () dưới dạng hàm xác định chuỗi yêu cầu "(" và ")" như tiền tố và hậu tố 5Thông số kỹ thuật
Tính tương thích của trình duyệt webBảng BCD chỉ tải trong trình duyệt Xem thêmLàm thế nào để bạn đánh giá một chuỗi trong JavaScript?Eval () là một thuộc tính chức năng của đối tượng toàn cầu. Đối số của hàm eval () là một chuỗi. Nó sẽ đánh giá chuỗi nguồn là một cơ thể tập lệnh, có nghĩa là cả hai câu và biểu thức đều được cho phép. Nó trả về giá trị hoàn thành của mã. is a function property of the global object. The argument of the eval() function is a string. It will evaluate the source string as a script body, which means both statements and expressions are allowed. It returns the completion value of the code.
Làm thế nào để bạn đánh giá một mã JavaScript?Hàm eval () trong javascript được sử dụng để đánh giá biểu thức.Đây là chức năng toàn cầu của Javascirpt, đánh giá chuỗi được chỉ định là mã JavaScript và thực thi nó.Tham số của hàm eval () là một chuỗi.Nếu tham số đại diện cho các câu lệnh, eval () sẽ đánh giá các câu lệnh. in JavaScript is used to evaluate the expression. It is JavaScirpt's global function, which evaluates the specified string as JavaScript code and executes it. The parameter of the eval() function is a string. If the parameter represents the statements, eval() evaluates the statements.
Eval () làm gì trong JavaScript?JavaScript eval () Phương thức Eval () đánh giá hoặc thực thi một đối số.Nếu đối số là một biểu thức, eval () đánh giá biểu thức.Nếu đối số là một hoặc nhiều câu lệnh javascript, eval () sẽ thực thi các câu lệnh.
Tại sao eval () là cái ác?Eval () là xấu nếu chạy trên máy chủ bằng cách sử dụng đầu vào được gửi bởi một máy khách không được tạo bởi nhà phát triển hoặc không được nhà phát triển vệ sinh.Eval () không xấu nếu chạy trên máy khách, ngay cả khi sử dụng đầu vào không được trình bày do khách hàng tạo ra.if running on the server using input submitted by a client that was not created by the developer or that was not sanitized by the developer. eval() is not evil if running on the client, even if using unsanitized input crafted by the client. |