Monday, November 22, 2010

javascript: undefined && null

Related link from Roti

6 comments:

iporsut said...

เสียงคีย์บอร์ดมันมากครับพี่ :)

PPhetra said...

ต้องระวังเรื่องน้ำหนักการกด key แล้วหล่ะ, ปุ่ม enter มันดูหลวมๆแล้ว เดี๋ยวจะไปเสียก่อน

Apirak said...

ผมลองไปค้นดูพบว่าตัว 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

Charinrat --->>>GOYE<<<--- said...

โห เดี๋ยวนี้มีซาวน์เอฟเฟกต์ด้วย แต่ก็ดีค่ะ(แวะเข้ามาเผื่อมีอะไรเอาไปใช้ได้)

sid said...

เพิ่งจะมาเห็น

@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

สเปกฉบับล่าสุดสามารถไปโหลดได้จากที่นี่ ขั้นตอนแตกต่างเล็กน้อย แต่ผลลัพธ์ยังคงเดิม

PPhetra said...

ขอบคุณมากที่มาให้ความกระจ่าง
จริงๆผมก็แอบไปเปิด spec ECMA ดูเหมือนกัน แต่ตาลายหาไม่เจอ