ประกาศหลายตัวแปรใน JavaScript


334

ใน JavaScript เป็นไปได้ที่จะประกาศตัวแปรหลายอย่างดังนี้:

var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;

... หรือเช่นนี้

var variable1 = "Hello World!",
    variable2 = "Testing...",
    variable3 = 42;

วิธีหนึ่งดีกว่า / เร็วกว่าวิธีอื่นหรือไม่?


6
สำหรับเร็วขึ้นการใช้jsperf นี้ฉันไม่เห็นความเร็วที่สอดคล้องกันโดยใช้วิธีใดวิธีหนึ่ง
Majid Fouladpour

คำตอบ:


345

วิธีแรกนั้นง่ายต่อการบำรุงรักษา การประกาศแต่ละรายการเป็นคำสั่งเดี่ยวในบรรทัดเดียวดังนั้นคุณสามารถเพิ่มลบและจัดลำดับการประกาศใหม่ได้อย่างง่ายดาย

ด้วยวิธีที่สองมันน่ารำคาญที่จะลบการประกาศครั้งแรกหรือครั้งสุดท้ายเพราะมันมีvarคำหลักและอัฒภาค และทุกครั้งที่คุณเพิ่มการประกาศใหม่คุณต้องเปลี่ยนเครื่องหมายอัฒภาคในบรรทัดเก่าเป็นเครื่องหมายจุลภาค


67
หากคุณกำลังเขียนโค้ดที่คุณคาดว่าจะย่อเล็กลงหรือแพ็คในภายหลังวิธีที่สองจะอนุญาตให้คอมเพรสเซอร์ (เช่นคอมเพรสเซอร์ YUI) ให้รุ่นที่ย่อเล็กลงมากขึ้น หากขนาดเป็นข้อควรพิจารณาฉันขอแนะนำให้ทำตามคำแนะนำของ JSLint ให้มากที่สุดเท่าที่จะทำได้
Lane

36
jslint อ้างว่าวิธีที่สองนั้นชอบธรรมกว่า แต่ฉันไม่เห็นด้วย
ThatGuy

29
วิธีที่สองคือการเพิ่มประสิทธิภาพขนาดเล็ก ประกาศ var ทั้งหมดจะถูกประมวลผลในครั้งเดียวมากกว่าหนึ่งครั้ง ไม่สำคัญว่าในเบราว์เซอร์สมัยใหม่ / คอมพิวเตอร์สมัยใหม่
webnesto

18
@ 0xc0de: ฉันต้องการดูหลักฐานการประกาศตัวแปรทั้งหมดในหนึ่งข้อความว่า "มีประสิทธิภาพ" หากคุณเป็นเพียงการวัดประสิทธิภาพเป็นเรื่องของการบันทึกไม่กี่ไบต์ก็อาจ แต่ถ้าคุณคำนึงถึงความสามารถในการอ่านและการบำรุงรักษาฉันคิดว่าคุณจะพบว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นวิธีที่ไม่ถูกต้องโดยเฉพาะอย่างยิ่งเนื่องจากเบราว์เซอร์สมัยใหม่จะรวบรวมและกำหนดค่าเริ่มต้นตัวแปรทั้งหมดในขอบเขต โดยส่วนตัวแล้วฉันพบว่าการประกาศตัวแปรทั้งหมดในบรรทัดเดียวหรือข้อความเพื่อให้เข้าใจรหัสได้เร็วขึ้นและเกิดข้อผิดพลาดได้ง่ายขึ้น
ogradyjd

9
ประสิทธิภาพที่เกี่ยวข้องทั้ง uglifyjs และตัวรวบรวมการปิดของ Google จะบีบคำสั่ง var ตามลำดับให้เป็นหนึ่งโดยอัตโนมัติโดยแสดงผลเป็นจุดนั้น (เท่าที่ฉันสามารถบอกได้ว่า YUI จะไม่ทำสิ่งนี้ แต่ฉันยังไม่ได้ทดสอบอย่างกว้างขวาง)
bhuber

215

นอกเหนือจากการบำรุงรักษาวิธีแรกที่ช่วยลดความเป็นไปได้ของการเกิดตัวแปรทั่วโลกของอุบัติเหตุ:

(function () {
var variable1 = "Hello World!" // semicolon is missed out accidently
var variable2 = "Testing..."; // still a local variable
var variable3 = 42;
}());

ในขณะที่วิธีที่สองให้อภัยน้อยกว่า:

(function () {
var variable1 = "Hello World!" // comma is missed out accidently
    variable2 = "Testing...", // becomes a global variable
    variable3 = 42; // a global variable as well
}());

4
จุดดี. var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42;หากพวกเขากำลังสั้นแล้วเขียนในบรรทัดเดียวจะหลีกเลี่ยงปัญหานี้: การสูญหาย,จะล้มเหลว แต่ฉันยอมรับว่ามีความเสี่ยง
Aram Kocharyan

14
หากคุณใช้โหมดเข้มงวดคุณจะไม่สามารถสร้างรูปกลมได้เช่นนี้
Danyal Aytekin

1
ฉันเป็นแฟนตัวยงของการประกาศตัวแปรหลายตัวในบรรทัดเดียวเพราะฉันคิดว่ามันดูสะอาดกว่า ที่กล่าวว่าการประกาศตัวแปรทั่วโลกโดยไม่ได้ตั้งใจเป็นอันตรายที่แท้จริง ในขณะที่กำลังค้นหาการรั่วไหลของหน่วยความจำฉันได้พบกับหลาย ๆ กรณีที่ฉันประกาศตัวแปรทั่วโลกหลายครั้งพร้อมกันโดยบังเอิญเพราะฉันใช้เครื่องหมายอัฒภาคแทนเครื่องหมายจุลภาค
smabbott

+1 ใช้เวลาครึ่งวันและเริ่มสงสัยว่าทำไมจึงไม่มีความแตกต่างระหว่างการประกาศทั้งสองนี้ จากนั้นอ่านคำตอบนี้ตรวจสอบรหัสอย่างระมัดระวังและพบข้อผิดพลาด ต้องการวันหยุด ...
Giedrius

1
โปรแกรมแก้ไขข้อความของฉันให้ฉันPossible Fatal Errorถ้าฉันพลาดอาการโคม่าไชโย!

33

เป็นเรื่องปกติที่จะใช้หนึ่งvarคำสั่งต่อขอบเขตสำหรับองค์กร วิธีที่ "ขอบเขต" ทั้งหมดทำตามรูปแบบที่คล้ายกันทำให้โค้ดอ่านง่ายขึ้น นอกจากนี้เครื่องยนต์ "ชักรอก" ทั้งหมดขึ้นไปข้างบน ดังนั้นให้การประกาศของคุณร่วมกันเลียนแบบสิ่งที่จะเกิดขึ้นจริงอย่างใกล้ชิดยิ่งขึ้น


6
คุณสามารถทำให้การประกาศร่วมกันโดยไม่ทำให้พวกเขาแบ่งปันการประกาศ 'var' เดียวกัน ฉันเข้าใจและยอมรับคำอธิบายที่ให้ไว้ที่ jslint (ลิงก์ของคุณ) แต่ฉันไม่แบ่งปันข้อสรุป ดังที่ได้กล่าวไว้ข้างต้นมันเป็นเรื่องของสไตล์มากกว่าสิ่งอื่นใด ในโลก Java (ในหมู่อื่น ๆ ) แนะนำให้ย้อนกลับ (หนึ่งคำประกาศต่อบรรทัด) เพื่อความสะดวกในการอ่าน
PhiLho

อ่านเพิ่มเติมหรือไม่ เหตุผลเดียวที่ผู้คนใส่ไว้ในหนึ่งบรรทัดคือเหตุผลเฉพาะ JS ที่คุณกล่าวถึง: JS ย้ายการประกาศทั้งหมดไปด้านบน ถ้ามันไม่ทำอย่างนั้นเราทุกคนจะประกาศ vars ของเราใกล้เคียงกับจุดที่พวกเขาจะใช้
Danyal Aytekin

@ vol7ron นั้นไม่ใช่กรณีและเป็นความเข้าใจผิดโดยรวมของvarคำสั่ง ตรงข้ามแน่นอนเป็นจริง ดูเอกสารประกอบและตัวอย่างนี้
jackweirdy

@jackweirdy คุณถูกต้องและเป็นกรณีการใช้งานไม่ดีหรือข้อผิดพลาดในเบราว์เซอร์รุ่นเก่า ฉันลบความคิดเห็นของฉันไปแล้ว
vol7ron

29

สามารถอ่านได้มากขึ้นเมื่อทำเช่นนี้:

var hey = 23;
var hi = 3;
var howdy 4;

แต่ใช้พื้นที่และบรรทัดของรหัสน้อยลงด้วยวิธีนี้:

var hey=23,hi=3,howdy=4;

มันเหมาะสำหรับการประหยัดพื้นที่ แต่ให้ตัวบีบอัด JavaScript จัดการให้คุณ


15

อาจจะเป็นเช่นนี้

var variable1 = "hello world"
, variable2 = 2
, variable3 = "how are you doing"
, variable4 = 42;

ยกเว้นเมื่อเปลี่ยนตัวแปรตัวแรกหรือตัวสุดท้ายมันง่ายต่อการบำรุงรักษาและอ่าน


6
โดยทั่วไปการใช้เครื่องหมายจุลภาคก่อนเครื่องหมายอัฒภาคจะขึ้นบรรทัดใหม่เพื่อป้องกันปัญหานั้น var variable1 = "สวัสดีชาวโลก" \ n, variable2 = 2 \ n, variable3 = "คุณเป็นอย่างไรบ้าง" \ n, variable4 = 42 \ n; \ n
BrianFreud

2
นี่คือไวยากรณ์ Haskell ฉันรู้สึกว่าอย่างใดไม่แนะนำ / ปฏิบัติทั่วไปใน javascript
shamanSK

14

มันเป็นเพียงเรื่องของการตั้งค่าส่วนตัว ไม่มีความแตกต่างระหว่างสองวิธีนี้นอกจากสองสามไบต์ที่บันทึกด้วยแบบฟอร์มที่สองหากคุณตัดพื้นที่สีขาวออก


ส่วนที่สองบันทึกสองสามไบต์
Sophie Alpert

Ben Alpert: คุณคิดยังไง?
Josh Stodola

หากคุณตัดช่องว่างออกให้ห่างจาก 'var foo = "hello", bar = "world";' การประกาศใช้อักขระน้อยกว่า 'var foo = "hello"; var bar = "world";' หากคุณมีเว็บไซต์ยอดนิยมประหยัดกี่ไบต์ใน JS สามารถช่วย (คุณยังต้องการที่จะลดชื่อตัวแปร ฯลฯ )
ไบรอันแคมป์เบล

ฉันเห็นสิ่งนี้เป็นจำนวนไบต์ที่บันทึกไว้ซึ่งไม่เกี่ยวข้องในเวลานี้เนื่องจากตัวขยาย JavaScript ที่เพิ่มขึ้นอย่างเห็นได้ชัดโหมดง่าย ๆ ของ Google Closer Compiler (เรียกว่า)
Bryan Field

1
@webnesto ไม่เคยมีประสิทธิภาพใด ๆ จากไวยากรณ์เมื่อความหมายของไวยากรณ์เหมือนกัน หนึ่งจะไม่รันโค้ดทันที แต่ก่อนแยกวิเคราะห์และทำการวิเคราะห์ความหมาย - นี่คือที่ทั้งสองรูปแบบการประกาศจะถูกทำให้เท่าเทียมกัน
Esailija

14

ECMAScript6 การมอบหมายการทำลายล้างเบื้องต้นซึ่งทำได้ดีทีเดียว:

[a, b] = [1, 2] aจะเท่ากับ1และจะเท่ากับb2


ไม่ตอบคำถาม แต่อาจเป็นทางเลือกที่ดีกว่าสำหรับวิธีการที่อธิบายทั้งสอง
svarog

1
ฉันคิดว่าวิธีการของคุณไม่สามารถใช้งานได้จริงในกรณีที่คุณมีรายการตัวแปรจำนวนมาก เป็นการยากที่จะบอกว่าตัวแปรใดที่เกี่ยวข้องกับค่าและคุณไม่ได้รับการป้องกันจากข้อผิดพลาดเป็นกรณีของการผสานที่ไม่ดีระหว่างที่คุณตั้งใจจะลบองค์ประกอบหนึ่งออกจากอาร์เรย์ ตัวอย่าง: let [aVar, bVar, cVar, xVar, yVar, zVar] = [10, 20, 30, 40, 50]; โดยส่วนตัวฉันไม่แนะนำ
Kirill Reznikov

1
มีประโยชน์ถ้าคุณต้องการตั้งค่าตัวแปรจำนวนมากด้วยค่าเดียวกัน การใช้เพื่อรีเซ็ตเป็นศูนย์ในลูปตัวอย่างเช่น
Nick

ใช่ นี่คือสิ่งที่ฉันกำลังมองหา โดยเฉพาะอย่างยิ่งถ้าคุณต้องการกำหนดคู่สองมิติหรือค่าหลายมิติ แต่ยังไม่ได้อาร์เรย์
Eugene Kardash

11
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;

สามารถอ่านได้มากกว่า:

var variable1 = "Hello World!",
    variable2 = "Testing...",
    variable3 = 42;

แต่พวกเขาทำสิ่งเดียวกัน


ใช้ "พื้นที่ไฟล์" น้อยลงหรือไม่ ฉันคิดว่าคุณมีคำอธิบายให้ทำ
Josh Stodola

@JoshStodola ดูพื้นที่ไฟล์เดียวกันกับฉัน ตั้งแต่แทนที่จะvar<space>เป็น<space><space><space><space>
WORMSS

@WORMSS เว้นแต่จะเป็นvar<space>หรือเทียบvar<tab> <tab>ส่วนใหญ่ยังคงเป็นที่สงสัย
mpag

9

ใช้การกำหนดค่าการทำลายโครงสร้าง ES6 : มันจะแกะค่าจากอาร์เรย์หรือคุณสมบัติจากวัตถุไปยังตัวแปรที่แตกต่างกัน

let [variable1 , variable2, variable3] = 
["Hello World!", "Testing...", 42];

console.log(variable1); // Hello World!
console.log(variable2); // Testing...
console.log(variable3); // 42


4
มันเป็นความคิดที่แย่มากโดยเฉพาะถ้าคุณต้องการกำหนดตัวแปรประมาณ 10 ตัว
คิริลล์ Reznikov

7

การใช้เครื่องหมายจุลภาค แต่ที่สำคัญของฉันอยู่ในการ for for loop:

for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}

ฉันไปที่นี่เพื่อค้นหาว่าตกลงใน JavaScript หรือไม่

แม้จะเห็นว่ามันใช้งานได้คำถามก็ยังคงอยู่ว่า n เป็นฟังก์ชันของท้องถิ่นหรือไม่

สิ่งนี้ยืนยันว่า n เป็นโลคัล:

a=[3,5,7,11];
(function l () { for (var i = 0, n = a.length; i < n; i++) {
  var e = a[i];
  console.log(e);
}}) ();
console.log(typeof n == "undefined" ?
  "as expected, n was local" : "oops, n was global");

สักครู่ฉันก็ไม่แน่ใจสลับไปมาระหว่างภาษา


7

แม้ว่าทั้งคู่จะถูกต้อง แต่การใช้คำสั่งที่สองทำให้นักพัฒนามือใหม่ไม่มีประสบการณ์จากการวางคำสั่ง var ทั่วทุกที่และทำให้เกิดปัญหาการยก หากมีเพียงหนึ่งวาร์ต่อฟังก์ชั่นที่ด้านบนของฟังก์ชั่นจะเป็นการดีกว่าที่จะดีบักโค้ดโดยรวม นี่อาจหมายความว่าบรรทัดที่มีการประกาศตัวแปรนั้นไม่ชัดเจนเท่าที่บางคนอาจต้องการ

ฉันรู้สึกว่าการแลกเปลี่ยนมีความคุ้มค่าถ้ามันหมายถึงการหย่านมนักพัฒนาออกจากการวาง 'var' ทุกที่ที่พวกเขารู้สึกเหมือน

ผู้คนอาจบ่นเกี่ยวกับ JSLint ฉันก็ทำได้เช่นกัน แต่ส่วนมากมันไม่ได้มุ่งไปที่การแก้ไขปัญหาเกี่ยวกับภาษา แต่ในการแก้ไขนิสัยที่ไม่ดีของโคเดอร์จึงป้องกันปัญหาในโค้ดที่พวกเขาเขียน ดังนั้น:

"ในภาษาที่มีขอบเขตบล็อกมักแนะนำให้มีการประกาศตัวแปรที่ไซต์ที่ใช้ครั้งแรก แต่เนื่องจาก JavaScript ไม่มีขอบเขตบล็อกจึงฉลาดที่จะประกาศตัวแปรทั้งหมดของฟังก์ชันที่ด้านบนของฟังก์ชัน แนะนำให้ใช้คำสั่ง var เดียวสำหรับแต่ละฟังก์ชัน " - http://www.jslint.com/lint.html#scope


6

ฉันคิดว่ามันเป็นเรื่องของการตั้งค่าส่วนตัว ฉันชอบที่จะทำในวิธีต่อไปนี้:

   var /* Vars */
            me = this, that = scope,
            temp, tempUri, tempUrl,
            videoId = getQueryString()["id"],
            host = location.protocol + '//' + location.host,
            baseUrl = "localhost",
            str = "Visit W3Schools",
            n = str.search(/w3schools/i),
            x = 5,
            y = 6,
            z = x + y
   /* End Vars */;

6

อีกเหตุผลที่หลีกเลี่ยงเวอร์ชันคำสั่งเดียว ( varเดียว) คือการดีบัก หากมีข้อผิดพลาดเกิดขึ้นในบรรทัดการกำหนดใด ๆการติดตามสแต็กจะแสดงเพียงหนึ่งบรรทัดเท่านั้น

หากคุณมี 10 ตัวแปรที่ถูกกำหนดด้วยไวยากรณ์ของจุลภาคคุณจะไม่มีทางรู้ได้เลยว่าใครเป็นผู้กระทำผิด

เวอร์ชั่นแถลงการณ์แต่ละฉบับไม่ได้รับผลกระทบจากความกำกวมนี้


2

แนวคิดของ "การทำงานร่วมกันมากกว่าการเชื่อมต่อ" สามารถนำไปใช้โดยทั่วไปมากกว่าวัตถุ / โมดูล / ฟังก์ชั่น นอกจากนี้ยังสามารถให้บริการในสถานการณ์นี้:

ตัวอย่างที่สองที่ OP แนะนำได้รวมตัวแปรทั้งหมดไว้ในคำสั่งเดียวกันซึ่งทำให้ไม่สามารถที่จะรับหนึ่งบรรทัดและย้ายไปที่อื่นโดยไม่ทำลายเนื้อหา (การมีเพศสัมพันธ์สูง) ตัวอย่างแรกที่เขาให้ทำให้การมอบหมายตัวแปรเป็นอิสระจากกัน (การมีเพศสัมพันธ์ต่ำ)

"การมีเพศสัมพันธ์ต่ำมักเป็นสัญญาณของระบบคอมพิวเตอร์ที่มีโครงสร้างที่ดีและการออกแบบที่ดีและเมื่อรวมเข้ากับการทำงานร่วมกันที่สูงจะช่วยให้เป้าหมายทั่วไปของความสามารถในการอ่านและการบำรุงรักษาสูง"

http://en.wikipedia.org/wiki/Coupling_(computer_programming)

ดังนั้นเลือกอันแรก


1
ฉันไม่เห็นว่าสิ่งนี้เกี่ยวข้องกับการแต่งงานกันหรือการทำงานร่วมกัน สนใจที่จะทำอย่างละเอียด?
Edson Medina

ตัวอย่างที่สองที่ OP แนะนำได้รวมตัวแปรทั้งหมดไว้ในคำสั่งเดียวกันซึ่งทำให้ไม่สามารถที่จะรับหนึ่งบรรทัดและย้ายไปที่อื่นโดยไม่ทำลายเนื้อหา (การมีเพศสัมพันธ์สูง) ตัวอย่างแรกที่เขาให้ทำให้การมอบหมายตัวแปรเป็นอิสระจากกัน (การมีเพศสัมพันธ์ต่ำ)
Magne

การมีเพศสัมพันธ์เป็นเรื่องเกี่ยวกับการพึ่งพาระหว่างโมดูล / วัตถุ / ฟังก์ชั่นที่แตกต่างกันไม่ใช่บรรทัดของรหัส!
Edson Medina

1
แต่เดิมมันเกี่ยวกับโมดูลใช่ แต่แนวคิดสามารถนำไปใช้โดยทั่วไปมากขึ้นแม้กระทั่งการรวมวัตถุ / ฟังก์ชั่นของคุณเองลงในการแสดงความหมาย
Magne

2

ฉันรู้โพสต์เก่า แต่เพื่อเพิ่มรายละเอียดของมุมมองสำหรับเพื่อนชาว Google:

ปัญหาการบำรุงรักษาสามารถเอาชนะได้ง่ายด้วยการจัดรูปแบบเล็กน้อยเช่นนี้

let
  my_var1 = 'foo',
  my_var2 = 'bar',
  my_var3 = 'baz'
;

ฉันใช้การจัดรูปแบบนี้อย่างเคร่งครัดตามความชอบส่วนตัว ฉันข้ามรูปแบบนี้สำหรับการประกาศเดียวแน่นอนหรือที่มันเพียงรวบรวมผลงาน


1

ฉันเชื่อว่าก่อนที่เราจะเริ่มใช้ ES6 วิธีการที่มีการประกาศ var เดียวนั้นไม่ดีหรือไม่ดี (ในกรณีที่คุณมี linters และ'use strict'มันเป็นรสนิยมที่ดีจริงๆ แต่ตอนนี้ทุกอย่างเปลี่ยนไปสำหรับฉัน :

  1. ตอนนี้เรามีตัวแปรสองชนิดใหม่และvarล้าสมัยแล้ว มันเป็นเรื่องดีที่จะใช้ทุกที่จนกว่าคุณต้องการจริงๆconst letบ่อยครั้งที่โค้ดของคุณจะมีการประกาศตัวแปรพร้อมการกำหนดที่อยู่ตรงกลางของโค้ดและเนื่องจากการกำหนดขอบเขตของบล็อกคุณมักจะย้ายตัวแปรระหว่างบล็อกในกรณีที่มีการเปลี่ยนแปลงเล็กน้อย ฉันคิดว่ามันเป็นเรื่องง่ายที่จะทำเช่นนั้นด้วยการประกาศหลายบรรทัด

  2. ไวยากรณ์ ES6 มีความหลากหลายมากขึ้นเรามี destructors, สตริงเทมเพลต, ฟังก์ชั่นลูกศรและการเลือกเสริม เมื่อคุณใช้คุณลักษณะทั้งหมดด้วยประกาศ var เดียวมันเจ็บอ่านง่าย


0

ฉันคิดว่าวิธีแรก (หลาย vars) ดีที่สุดเพราะคุณสามารถจบลงด้วยสิ่งนี้ (จากแอปพลิเคชันที่ใช้การทำให้ล้มลง) ซึ่งอ่านยากในความคิดของฉัน:

    var categories = ko.observableArray(),
        keywordFilter = ko.observableArray(),
        omniFilter = ko.observable('').extend({ throttle: 300 }),
        filteredCategories = ko.computed(function () {
            var underlyingArray = categories();
            return ko.utils.arrayFilter(underlyingArray, function (n) {
                return n.FilteredSportCount() > 0;
            });
        }),
        favoriteSports = ko.computed(function () {
            var sports = ko.observableArray();
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        sports.push(a);
                    }
                });
            });
            return sports;
        }),
        toggleFavorite = function (sport, userId) {
            var isFavorite = sport.IsFavorite();

            var url = setfavouritesurl;

            var data = {
                userId: userId,
                sportId: sport.Id(),
                isFavourite: !isFavorite
            };

            var callback = function () {
                sport.IsFavorite(!isFavorite);
            };

            jQuery.support.cors = true;
            jQuery.ajax({
                url: url,
                type: "GET",
                data: data,
                success: callback
            });
        },
        hasfavoriteSports = ko.computed(function () {
            var result = false;
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        result = true;
                    }
                });
            });
            return result;
        });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.