Javaเร็วส์, Javascript, Erlang, Python, Ruby, Clojure, Groovy, เลี้ยงลูก, วาดภาพ
เสียงคีย์บอร์ดมันมากครับพี่ :)
ต้องระวังเรื่องน้ำหนักการกด key แล้วหล่ะ, ปุ่ม enter มันดูหลวมๆแล้ว เดี๋ยวจะไปเสียก่อน
ผมลองไปค้นดูพบว่าตัว java script มันจะพยายามเปลี่ยน type เป็น boolean หรือ number ก่อน ถ้าทำไม่ได้มันจะเปลี่ยนเป็นเทียบด้วย string แต่เค้าไม่ได้บอกว่าถ้าเป็น null กับ undefined จะเทียบอย่างไรผมลองหาค่าตอนเทียบเป็น boolean, number กับ string ดู ได้ความว่าnull valuesBoolean: falseNumeric: 0String: “null”undefined valuesBoolean: falseNumeric: NaNString: “undefined”แต่พอเทียบfalse == nullได้ค่าเป็น false เลยไม่รู้ว่าเค้ามี logic เปื้องหลัง การเทียบ undefine == null หรือเป็นการกำหนดไปเลยครับreference: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators
โห เดี๋ยวนี้มีซาวน์เอฟเฟกต์ด้วย แต่ก็ดีค่ะ(แวะเข้ามาเผื่อมีอะไรเอาไปใช้ได้)
เพิ่งจะมาเห็น@apirakอาจจะฟังดูสับสน แต่จริง ๆ แล้วในกรณีของ null JavaScript มีวิธีการ compare operator (==) ที่พิเศษกว่าปกติ ถ้าเอาแบบสั้น ๆ null เป็น true เฉพาะกรณีดังต่อไปนี้null == null // truenull == undefined // trueทีนี้ถ้าอยากรู้จริง ๆ ก็ต้องไปดู ECMAScript Language Specification จะเห็นว่ากรณีที่ type ของ x กับ y ไม่ตรงกัน เช่นกรณีfalse == nulltypeof(false) // 'booelan'typeof(null) // 'object'จะไปตกกรณี 18 ซึ่งก็จะมีการแปลงค่า false ด้วย ToNumber ซึ่งทำให้ได้ค่าเป็น 0 เคสของเราก็จะกลายเป็น0 == nullซึ่งพอไปเทียบกับวิธีการเปรียบเทียบอีกครั้งหนึ่ง ก็จะได้เป็นกรณี 20 ซึ่งก็จะมีการแปลงค่า null ด้วย ToPrimitive แต่ก็จะยังคงทำให้ได้ค่าเป็น null ตามเดิม ก่อนจะไปตกที่บทสรุปว่าfalse == null //false0 == null // falseสเปกฉบับล่าสุดสามารถไปโหลดได้จากที่นี่ ขั้นตอนแตกต่างเล็กน้อย แต่ผลลัพธ์ยังคงเดิม
ขอบคุณมากที่มาให้ความกระจ่างจริงๆผมก็แอบไปเปิด spec ECMA ดูเหมือนกัน แต่ตาลายหาไม่เจอ
Post a Comment
6 comments:
เสียงคีย์บอร์ดมันมากครับพี่ :)
ต้องระวังเรื่องน้ำหนักการกด key แล้วหล่ะ, ปุ่ม enter มันดูหลวมๆแล้ว เดี๋ยวจะไปเสียก่อน
ผมลองไปค้นดูพบว่าตัว java script มันจะพยายามเปลี่ยน type เป็น boolean หรือ number ก่อน ถ้าทำไม่ได้มันจะเปลี่ยนเป็นเทียบด้วย string แต่เค้าไม่ได้บอกว่าถ้าเป็น null กับ undefined จะเทียบอย่างไร
ผมลองหาค่าตอนเทียบเป็น boolean, number กับ string ดู ได้ความว่า
null values
Boolean: false
Numeric: 0
String: “null”
undefined values
Boolean: false
Numeric: NaN
String: “undefined”
แต่พอเทียบ
false == null
ได้ค่าเป็น false เลยไม่รู้ว่าเค้ามี logic เปื้องหลัง การเทียบ undefine == null หรือเป็นการกำหนดไปเลยครับ
reference: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators
โห เดี๋ยวนี้มีซาวน์เอฟเฟกต์ด้วย แต่ก็ดีค่ะ(แวะเข้ามาเผื่อมีอะไรเอาไปใช้ได้)
เพิ่งจะมาเห็น
@apirak
อาจจะฟังดูสับสน แต่จริง ๆ แล้วในกรณีของ null JavaScript มีวิธีการ compare operator (==) ที่พิเศษกว่าปกติ ถ้าเอาแบบสั้น ๆ null เป็น true เฉพาะกรณีดังต่อไปนี้
null == null // true
null == undefined // true
ทีนี้ถ้าอยากรู้จริง ๆ ก็ต้องไปดู ECMAScript Language Specification จะเห็นว่ากรณีที่ type ของ x กับ y ไม่ตรงกัน เช่นกรณี
false == null
typeof(false) // 'booelan'
typeof(null) // 'object'
จะไปตกกรณี 18 ซึ่งก็จะมีการแปลงค่า false ด้วย ToNumber ซึ่งทำให้ได้ค่าเป็น 0 เคสของเราก็จะกลายเป็น
0 == null
ซึ่งพอไปเทียบกับวิธีการเปรียบเทียบอีกครั้งหนึ่ง ก็จะได้เป็นกรณี 20 ซึ่งก็จะมีการแปลงค่า null ด้วย ToPrimitive แต่ก็จะยังคงทำให้ได้ค่าเป็น null ตามเดิม ก่อนจะไปตกที่บทสรุปว่า
false == null //false
0 == null // false
สเปกฉบับล่าสุดสามารถไปโหลดได้จากที่นี่ ขั้นตอนแตกต่างเล็กน้อย แต่ผลลัพธ์ยังคงเดิม
ขอบคุณมากที่มาให้ความกระจ่าง
จริงๆผมก็แอบไปเปิด spec ECMA ดูเหมือนกัน แต่ตาลายหาไม่เจอ
Post a Comment