Ini bukan tantangan tetapi pertanyaan, saya pikir itu pada topik karena
Pertanyaan non-tantangan yang terkait dengan memecahkan teka-teki pemrograman atau jenis tantangan tertentu juga ada di topik.
Sekarang ke pertanyaan:
Mungkinkah menulis kode JavaScript hanya dengan 5 huruf? JSFuck sudah melakukan ini dengan 6 simbol !+[]()
tapi saya ingin tahu apakah !
karakter tersebut diperlukan.
JSFuck bekerja dengan kombinasi casting ke string (dengan menambahkan array kosong), casting ke angka (dengan menulis a + di depan) dan casting ke boolean dengan meniadakan. Sebagai contoh:
[] \\ Empty array
+[] \\ Cast to number -> 0
!+[] \\ Negate -> true
!+[]+[] \\ Cast to string -> "true"
Dari string ini kita dapat mengekstrak semua hurufnya menggunakan tanda kurung siku dengan angka di dalamnya, dan angka apa pun dapat dibuat dengan menambahkan true bersama sebanyak itu.
Seperti ini banyak surat dapat ditemukan dan dapat digabungkan ke string. String yang paling penting untuk dapat dibuat adalah "constructor"
karena dapat digunakan untuk mendapatkan Function
dari fungsi apa pun, dan objek ini dapat digunakan untuk mengeksekusi string sebagai JavaScript:
[]["find"] \\ the function Array.prototype.find
[]["find"]["constructor"] \\ the Function object
[]["find"]["constructor"](string)() \\ same as eval(string)
Seperti yang Anda lihat, !
ada 2 kegunaan di sini:
- Membuat angka untuk memilih huruf dari string.
- Casting ke boolean untuk mendapatkan
"true"
dan"false"
.
Yang pertama dari 2 ini juga dapat dilakukan dengan menggunakan ++
incrementor, tidak langsung aktif 0
, tetapi dapat digunakan pada elemen-elemen di dalam array:
+[] \\ 0
[+[]] \\ [0]
[+[]][+[]] \\ [0][0] -> 0
++[+[]][+[]] \\ ++[0][0]-> 1
++[[]][+[]] \\ also works because ++ casts to number
Jadi semua angka bisa dibuat tanpa !
.
Yang kedua lebih sulit. Pentingnya "true"
dan "false"
terletak dalam surat-surat "r"
dan "s"
, yang keduanya muncul di "constructor"
. Saya sudah menemukan semua huruf lain "constructor"
dengan cara "undefined"
, "Infinity"
, "NaN"
dan dengan casting fungsi untuk string.
Jadi pertanyaan terakhir: (Bagaimana) Anda bisa membuat boolean, atau huruf "r"
dan "s"
dalam JavaScript hanya dengan menggunakan +[]()
?
Surat itu "l"
mungkin juga membantu. Ini bisa didapat dari form null
tapi saya belum bisa mendapatkan nilai itu dengan 5 simbol tersebut. Misalnya dapat digunakan untuk mendapatkan boolean jika kita sudah memiliki "s"
:
[]["includes"]() \\ false
[+[]]["includes"](+[]) \\ true
Surat itu "l"
dan "k"
bersama - sama akan memberikan akses ke "r"
:
([]+[])["link"]() \\ "<a href="undefined"></a>"
Cara apa pun untuk mendapatkan boolean, null
atau surat apa r s l k
pun akan sangat berguna!
Perpustakaan yang kami miliki:
Array.prototype.find: [] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + ( ++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])])]] Infinity: + ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + + (+ + [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ []) + (+ []) + (+ [])) NaN: + [] [[]] tidak terdefinisi: [][[]] 0: + [] 1: ++ [[]] [+ []] 2: (++ [[]] [+ []]) + (++ [[]] [+ []]) 3: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 4: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) 5: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) 6: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 7: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 8: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) 9: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []]) a: (+ [] [[]] + []) [++ [[]] [+ []]] c: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] d: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] e: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []])] f: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []]) + (++ [[]] [+ []])] i: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]] n: ([] [[]] + []) [++ [[]] [+ []]] o: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] t: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ [] ])] u: ([] [[]] + []) [+ []] v: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]))] y: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ [] ]) + (++ [[]] [+ []])] I: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [+ []] N: (+ [] [[]] + []) [+ []] "": ([] [(([] [[]] + []) [(++ [[]] [+ []]) + + (++ [[]] [+ []]) + + (+ + [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [ ]) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ (++ [[]] [+ [] ] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + + (+ + [[]] [+ []]) + (++ [[]] [+ []])))]] (: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])))]] ): ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []])))] {: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])))]] }: ([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])]]] [[]) [+ ((++ [[]] [+ []] ]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + [] + ((++ [[]] [+ []]) + + ( ++ [[]] [+ []])))] .: (+ (++ [[]] [+ []] + [] + (++ [[]] [+ []]) + ([] [[]] + []) [(++ [ []] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + (++ [[]] [+ [] ] + [] + (+ []) + (+ []))) + []) [++ [[]] [+ []]] ,:[[]] [([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + ( ++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + ([] [(([] [[]] + []) [ (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + ( ++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] ] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + + (++ [[]] [+ []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [ []] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []] )] + ([] [[]] + []) [++ [[]] [+ []]] + ([] [(([] [[]] + []) [(++ [[ ]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) ]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[]] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + + (++ [[]] [ + []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + (+ [] [[]] + []) [++ [[]] [+ []]] + (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + ( ++ [[]] [+ []] + []) + (+ []) + (+ []) + (+ [])) + []) [(++ [[]] [+ [] ]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + + (++ [[ ]] [+ []]) + (++ [[]] [+ []])]] ([[]]) + []
sumber
eval
2453 karakter denganwindow
diizinkan.Jawaban:
Setelah melakukan brainstorming , hasilnya tampaknya, setidaknya pada browser modern, tidak ada cara untuk melakukan ini.
Saya akan mencoba merangkum seluruh proses, menambahkan beberapa alasan tentang mengapa kami telah kehabisan opsi kami di domain tertentu sebelum melanjutkan. Kemudian, kecuali beberapa jenis wawasan baru yang menakjubkan (seperti, kasus sudut sintaksis JavaScript yang dilupakan oleh semua orang), akan sangat jelas bahwa tidak ada cara untuk mendapatkan surat-surat yang tersisa.
Literal
Satu-satunya langsung literal Anda dapat membuat dengan
+()[]
adalah array kosong bersarang[]
,[[]]
,[[[]]]
, dll Dari sana, kita bisa mulai casting nilai-nilai menggunakan+
:+[]
mendapat nol, yang trik Jens meluas ke bilangan bulat positif sewenang-wenang menggunakan++
.[]+[]
adalah""
. Bahkan,[]+x
membuat kita representasi stringx
secara umum.[]
Penggunaan selanjutnya adalah pengindeksan. Pengindeksan objek di luar batas ([][[]]
) membuat Andaundefined
. Melemparkannya ke string dan mengindeks hasilnya membuat Anda mendapatkan suratd e f i n u
; melemparkannya ke integer terlebih dahulu menggunakan+
membuat AndaNaN
, dari mana huruf-hurufa N
mengikuti.Menggunakan
++
trik pada nilai non-integer yang dicapai sejauh ini baik memberiNaN
atau kesalahan. Selain itu, tidak ada objek yang dapat kita buat yang dapat dipanggil (belum), jadi()
tidak membantu (kecuali untuk pengelompokan).Trik yang tersisa di lengan kami adalah casting dan indexing. Jadi pertanyaannya adalah: string mana yang bisa kita buat menggunakan karakter
0123456789adefinuN
yang baikJumlah literal
Sebagai contoh dari opsi kedua, kita dapat membuat string
"1e1000"
, lalu mendapatkanInfinity
dari+"1e1000"
, dan melemparkannya kembali ke string memberi kita suraty
danI
.Juga, kita dapat membuat
"11e100"
, melemparkan ke nomor dan kembali ke string, untuk mendapatkan"1.1e+101"
, dari mana kita mengekstrak.
dan+
.Dengan menggunakan itu
.
, pada gilirannya, kita dapat membuat string".0000001"
, melemparkannya ke nomor dan kembali, untuk mendapatkan"1e-7"
, memenangkan kita-
.Pada dasarnya itu semua float akan memberi Anda: tidak ada nilai lebih menarik selain
Infinity
danNaN
, dan tidak ada lagi karakter yang digunakan dalam representasi string mereka yang biasa selain-+.0123456789e
.Properti
Jadi kami punya surat-suratnya
-+.0123456789adefinuyIN
. Properti mana yang bisa kita jangkau? Mari kita bertanya JavaScript.Hanya
[].find
, yang sudah ditemukan Jens. Mari kita melemparkannya ke sebuah string, menuai semua suratnya, dan coba lagi. Representasi string sedikit berbeda di seluruh browser. Di Chrome dan Edge,"function find() { [native code] }"
berisiacdefinotuv()[]{}
dan spasi; alfabet lengkap kami adalah sekarang+-.()[]{}0123456789INacdefinotuvy
. Di Firefox, ada lebih banyak ruang dan baris baru, tetapi hurufnya sama.Kami ulangi pencarian kami:
String.prototype.concat
sudah usang: ia melakukan apa yang+
dilakukannya, yang sudah bisa kita lakukan. Jadi kami punyaArray.prototype.concat
danArray.prototype.find
. Apa yang bisa kita lakukan dengan mereka?Fungsi
concat()
mari kita buat, untuk pertama kalinya, array yang lebih panjang.[[]].concat([[]])
adalah[[], []]
, dan casting itu ke string membuat kita","
. (Ini tidak membantu kami menemukan properti baru.) Tetapi.concat
tidak mengubah nilai-nilai kami, dan itu tidak pernah dapat kembalinull
atau yang seperti itu.Menelepon
find()
juga tidak membantu: dokumentasi MDN mengatakanKedua hal itu sudah bisa kita lakukan menggunakan pengindeksan.
Dan dari sini, tidak ada tempat lain untuk pergi. Jika Anda meragukan sesuatu yang saya tulis, beri tahu saya di komentar.
sumber
null
fungsi kembali:String.prototype.match
,RegExp.exec
, danArray.prototype.includes
. Menemukan semua ini mustahil untuk terbentuk, kecuali ada cara aneh untuk membentuk sebuah regex yang saya tidak tahu, saya juga menyimpulkan bahwa tidak ada cara yang mungkin untuk melakukan ini."catch"
dan"throw"
, yang saat ini tidak dapat kita lakukan, kita akan membutuhkan sesuatu yangeval
mirip untuk menggunakannya sebagai kata kunci, yang merupakan tujuan utama kita.-
dan casting nomor, tetapi itu tidak terlalu membantu.3 fungsi dalam jawaban Lynn tidaklah sia-sia. Tetapi mode ketat dalam ECMAScript 5 menggagalkan rencana saya.
Ada kekhasan dalam versi JavaScript / ECMAScript yang lebih lama. Jika suatu metode disebut tanpa objek, objek global
window
diasumsikan. Jadi kita bisa melakukan ini:Ini masih berlaku untuk peramban modern, tetapi hanya jika fungsinya tidak ditentukan dalam mode ketat. Dan semua fungsi bawaan (dengan kode asli) tampaknya berada dalam mode ketat. Di peramban lama saat belum ada mode ketat, ini juga berfungsi untuk fungsi bawaan.
Asumsikan kita menggunakan browser lama. Maka jika kita mau
window
, kita harus menemukan fungsi bawaan yang mengembalikan sesuatu yang berisithis
. Dalam satu-satunya pilihan yang kami miliki, ada fungsi yangArray.prototype.concat
melakukan hal itu. Kita bisa mengujinya seperti ini:Jadi pada dasarnya itu tidak peduli apakah objek yang dipanggil adalah array (tetapi setidaknya harus menjadi objek). Itu hanya membungkusnya dalam array jika tidak.
Jika sudah
window
, pertama-tama kita bisa mendapatkan string[object Window]
dengan melemparkannya ke string. Dengan karakter barub
, kita dapat memperolehr
dans
menggunakan dua baris berikut masing-masing, dan setiap karakter yang tidak kita milikiconstructor
:Tetapi masalah lainnya adalah menghapus referensi objek
[].concat
. Membungkusnya dalam sebuah array dan mengekstraksi tidak berfungsi, karena[].concat
sudah berarti[]["concat"]
. Satu-satunya cara saya tahu yang mungkin bisa dibangun menggunakan+[]()
adalah mengembalikannya dari suatu fungsi.Array.prototype.find
sepertinya bisa melakukan itu:Kami selalu memiliki fungsi kebenaran.
Array.prototype.concat
danString.prototype.concat
keduanya mengembalikan kebenaran jika objeknyawindow
. Jika kami menggunakan yang terakhir, kami menggunakan ketiga fungsi yang tersedia.Namun, sayangnya,
Array.prototype.find
tidak ada di browser lama yang kami gunakan. Setidaknya saya tidak menemukan satu yang berfungsi. Dan saya tidak menemukan cara lain untuk menghapus referensi objek.Kode lengkap yang dapat diuji di browser modern yang mengembalikan
r
dans
, dengan.bind(window)
solusinya:sumber
find
datang lebih lambat daripada mode ketat sehingga menemukan sesuatu yang berfungsi tidak mungkin. Saya bertanya tentang Edge karena saya pikir mungkin ada kesempatan lebih memilih kompatibilitas dengan mengikuti standar. Saya juga mencoba Konqueror karena alasan yang sama. Dan beberapa browser baris perintah, tetapi tidak satupun yang mendukung JavaScript.find
belum diimplementasikan, mungkin sebagian? ... Kalau saja itu ada dalam daftar mereka ...