- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
我在看một cuộc nói chuyện về việc chiếm quyền điều khiển JSONChưa đầy 2 phút đã có sẵn JavaScript mà tôi chưa quen.
let:let{let:[x=1]}=[cảnh báo(1)]
Nó dường như hoạt động trên Edge và chỉ cảnh báo 1
, nhưng tôi chưa bao giờ gặp phải hãy: hãy để
ngữ pháp. Tôi tò mò, tôi nên đọc bài viết này như thế nào?
câu trả lời hay nhất
Video thực sự nói rằng nó sử dụng phá hủy bài tậpVà labels .
Mã này dường như không hoạt động trong các trình duyệt khác ngoài Edge; vì vậy để nó hoạt động trong các trình duyệt khác, nó cần phải trông như thế này:
hãy:{let{let:[x=1]}=[cảnh báo(1)]}
Tại sao? Chúng ta hãy nhìn vào bảng điều khiển Firefox:
Lỗi cú pháp: khai báo từ vựng không thể xuất hiện trong ngữ cảnh câu lệnh đơn
"Bối cảnh câu lệnh đơn" mà lỗi đề cập đến làcho phép:
Phần mở đầu— hãy{let:[x=1]}=[cảnh báo(1)]
. trong trường hợp này,cho phép
是一个 label. Không có từ khóa nào khác có vẻ hoạt động như thẻ:
var: while(false); // => Lỗi cú pháp: thiếu tên biến
for: while(false); // => Lỗi cú pháp: thiếu ( sau for
Tuy nhiên, một số trong số chúng hoạt động:
năng suất: while(false);
không đồng bộ: while(false);
đang chờ: while(false);
hiện hữuchế độ nghiêm ngặt然而,cho phép
Và năng suất
cũng sẽ thất bại với Cú phápLỗi:
[từ khóa] là một định danh dành riêng
.
Bây giờ, phần còn lại của mã sử dụng tính cấu trúc:
cho phép {
hãy: [x = 1]
} = [
cảnh báo(1)
];
{
}
TRONG cho phép
Nó chỉ đại diện cho một thuộc tính đối tượng, điều này hoàn toàn ổn. Sau đây là JS hợp lệ:
hãy để đối tượng = {
hãy: 2,
biến: 1,
const: "xin chào",
trong khi: đúng,
ném: Lỗi
};
cảnh báo(1)
được thực thi, vì vậy bạn sẽ thấy cảnh báo. Kết quả tính toán của nó là undefined
, vậy bạn có:
hãy để {let: [x = 1]} = [không xác định];
Bây giờ nó cố gắng để có được [không xác định]
của cho phép
thuộc tính, bản thân nó là undefined
. Hơn nữa, dòng này cố gắng lấy giá trị của thuộc tính và tiếp tục cấu trúc nó thành một mảng (vì vậy giá trị phải là một giá trị có thể lặp lại) có phần tử đầu tiên có tên biến là x
, trong đó giá trị mặc định 1
. bởi vì[không xác định].let
Đúngundefined
, không thể bị hủy cấu trúc, do đó mã sẽ báo lỗi:
Lỗi Loại: […].let không được xác định
Công việc Phá hủy có thể trông giống như một trong những dòng sau:
let {let: [x = 1]} = {let: [alert(1)]}; // x hiện là 1 (giá trị mặc định, vì phần tử đầu tiên ở phía bên phải không được xác định)
let {let: [x = 1]} = {let: [2]}; // x bây giờ là 2 (được xác định do vế phải)
Sẽ không có lỗi, lần đầu tiên sẽ1
được giao chox
, vì phần tử đầu tiên trong mảng bên phải làkhông xác định
.
Một phần của sự nhầm lẫn có thể xuất phát từ việc phá hủy lồng nhau, chẳng hạn như hai đoạn mã sau:
hãy để {a: {b: {c}}} = {a: {b: {c: 3}}}
hãy để {a: {b: {c = 1}}} = {a: {b: {c: 3}}}
Ở đây, không có biến nào được tạoMột
hoặcb
,chỉ mộtc
, tức là đằng sau没有Mã định danh được chuyển qua bên trái :
. gót chân :
Tên thuộc tính về cơ bản chỉ ra giá trị được gán cho"Thuộc tính này được tìm thấy ở đúng giá trị".
Về javascript - điều gì đã xảy ra với `let:let{let:[x=1]}=[alert(1)]`? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/49604335/
//Phiên bản A: var let = true; console.log(let);//true //Phiên bản B: let let = 0 // Lỗi cú pháp: let i
//Phiên bản A: var let = true; console.log(let);//true //Phiên bản B: let let = 0 // Lỗi cú pháp: let i
Tôi mới nói chuyện chưa đầy 2 phút về việc chiếm quyền điều khiển JSON và đã có JavaScript mà tôi không quen thuộc. let:let{let:[x=1]}=[alert(1)] Nó dường như hoạt động trên Edge và
(let ((x 2) (y 3) (let ((x 7) (z (+ xy))) (* zx))) Sử dụng đoạn mã trên, tại sao câu trả lời là 35, không phải 70? Trong câu thứ hai let
Tôi đang viết một hàm lấy khoảng làm tham số và trả về lỗi phần trăm, nhưng tôi không thể sử dụng let hoặc let*. Đây là mã: Phiên bản let lồng nhau: (xác định (khoảng phần trăm) (let (sta
Tôi đã đọc về Tùy chọn trong Swift và đã thấy một số ví dụ trong đó if let được sử dụng để kiểm tra xem Tùy chọn có chứa giá trị hay không và nếu có thì hãy làm điều gì đó với giá trị mở rộng. Tuy nhiên, tôi thấy điều đó trong Sw.
Tôi đang cố triển khai thuật toán tìm kiếm cục bộ để tối ưu hóa. Tôi mới sử dụng Lisp, vì vậy đây là mã tôi nghĩ ra (lưu ý ĐỊNH DẠNG): (defun local-search (giải pháp
Tôi đã đọc về Tùy chọn trong Swift và tôi đã thấy một số ví dụ trong đó if let được sử dụng để kiểm tra xem Tùy chọn có chứa giá trị hay không và nếu có - hãy thực hiện một số thao tác trên giá trị chưa được bao bọc.
let () = Random.self_init();; let _ = Random.self_init ();; Trân trọng! Câu trả lời hay nhất
Có cách nào để tránh việc xây dựng sau đây? Một cách để kiểm tra null mà không cần thêm ý định vào mã? Ý tôi là nếu (variableOne == null) trả về nhưng theo phong cách koltin thú vị? va
Khi nào việc sử dụng if-let thay vì let làm cho mã trông đẹp hơn và nó có ảnh hưởng gì đến hiệu suất không? Câu trả lời hay nhất tôi đoán nên sử dụng if-let khi bạn muốn tham chiếu giá trị của điều kiện if trong phần "then" của mã: tức là thay vì (let [r
Tôi có các hàm sau: (def i (atom {})) ;số liệu thống kê tệp tăng/được tính toán (defn updatei [n fic fos] (hoán đổi! i co
Câu hỏi này đã có câu trả lời: Bối rối vì sự khác biệt giữa let và let* trong Đề án (2 câu trả lời) Đã đóng 10 năm trước. hãy, hãy* và tôi
Vì vậy, trong Objective-C, C/C++, .NET và hầu hết mọi ngôn ngữ khác mà tôi đã làm việc, bạn có thể khai báo các hằng số có thể chứa các hằng số trước đó, như #define PI 3.14159 #define HALFPI
Trong Common Lisp, let sử dụng danh sách để liên kết (liên kết), nghĩa là: (let ((var1 1) (var2 2)) ...) Mặc dù Clojure sử dụng một vectơ thay thế: (let
Hãy xem hai kịch bản sau đây sử dụng cùng một mã: Sử dụng IF LET: public func ngoại vi(_ ngoại vi: CBPeripheral, didDiscoverServices er
Câu hỏi này đã có câu trả lời ở đây: Sự khác biệt giữa "static var" và "var" trong Swift (3 câu trả lời) Đã đóng 5 năm trước. lớp Foo {
Ví dụ trong đầu tôi là: Cái gì tốt hơn? Ví dụ 1: (define (foo x) ... (values abc)) (let-values (((abc) (foo 42))) .
Hãy xem xét macro sau: (defmacro somemacro [] (list 'let ['somevar "Value"] 'somevar)) Việc mở rộng nó sẽ tạo ra kết quả sau: (macroexpand
Bạn có thể vui lòng giải thích cho tôi tại sao bạn phải sử dụng let thay vì let trong trường hợp này không? Bài kiểm tra chỉ vượt qua nếu tôi bao gồm !. Tôi nghĩ tôi hiểu let sẽ tự động thực thi trước mỗi câu lệnh "it" trong khối đó, nhưng có vẻ như không phải vậy. mô tả
Tôi là một lập trình viên xuất sắc, rất giỏi!