์ด ๊ธ์ ํ๋ก ํธ์๋ ์ง๋ฌด ๋ฉด์ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ Github ์ ์ฅ์ front-end-interview-handbook ๋ฒ์ญ๋ณธ์ผ๋ก, ์ ์ฅ์์ Translations ํด๋์ ๋ด์ฉ๊ณผ ๋์ผํฉ๋๋ค.
ํ๋ก ํธ์๋ ๋ฉด์ ์ง๋ฌธ - JS ์ง๋ฌธ์ ๋ํ ํด์ค์
๋๋ค.
Pull Request๋ฅผ ํตํ ์ ์, ์์ ์์ฒญ ํ์ํฉ๋๋ค.
Function.prototype.bind
์ ๋ํด ์ค๋ช
ํ์ธ์.document.write()
๋ฅผ ์ฌ์ฉํ๋์?ํธ์ด์คํ
์ ๋ํด ์ค๋ช
ํ์ธ์.load
์ด๋ฒคํธ์ document DOMContentLoaded
์ด๋ฒคํธ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?==
์ ===
์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?Function.prototype.bind
์ ๋ํด ์ค๋ช
ํ์ธ์.MDN์์ ์ธ์ฉ:
bind()
๋ฉ์๋๋ ํธ์ถ๋ ๋, this ํค์๋๊ฐ ์ฃผ์ด์ง ์ธ์ ๊ฐ์ผ๋ก ์ค์ ๋๊ณ , ์๋ก์ด ํจ์๊ฐ ํธ์ถ๋ ๋, ์์ชฝ์ ๋งค๊ฐ๋ณ์๋ ์์ ์ ์ธ์๋ฅผ ์ฌ์ฉํด ๋ฏธ๋ฆฌ ์์๋๋ก ์ฑ์๋์ ์๋ก์ด ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์ ๊ฒฝํ์, ๋ค๋ฅธ ํจ์๋ก ์ ๋ฌํ๊ณ ์ ํ๋ ํด๋์ค์ ๋ฉ์๋์์ this
์ ๊ฐ์ ๋ฐ์ธ๋ฉํ ๋ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค. ์ด๋ React ์ปดํฌ๋ํธ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
document.write()
๋ฅผ ์ฌ์ฉํ๋์?document.write()
๋ document.open()
์ ์ํด ์ด๋ฆฐ ๋ฌธ์ ์คํธ๋ฆผ์ ํ
์คํธ ๋ฌธ์์ด์ ์๋๋ค. ํ์ด์ง๊ฐ ๋ก๋๋ ํ์ document.write()
๊ฐ ์คํ๋๋ฉด document.open
์ ํธ์ถํ์ฌ ๋ฌธ์ ์ ์ฒด๋ฅผ ์ง์ฐ๊ณ (<head>
์ <body>
๋ฅผ ์ง์๋๋ค!). ๋ฌธ์์ด๋ก ์ฃผ์ด์ง ๋งค๊ฐ ๋ณ์ ๊ฐ์ผ๋ก ๋์ฒดํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ํํ๊ณ ์ค์ฉ๋๊ธฐ ์ฝ์ต๋๋ค.
document.write()
๊ฐ ์ฝ๋๋ถ์์ด๋ JavaScript๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ ์คํ์ผ์ ํฌํจํ๊ณ ์ถ์ ๋ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช
ํ๋ ์จ๋ผ์ธ ๋ต๋ณ์ด ๋ช ๊ฐ์ง ์์ต๋๋ค. ์ฌ์ง์ด HTML5 ๋ณด์ผ๋ฌ ํ๋ ์ดํธ์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํ๊ณ ์คํ ์์๋ฅผ ๋ณด์กดํ ๋๋ ์ฌ์ฉ๋ฉ๋๋ค! ๊ทธ๋ฌ๋, ์ ๋ ๊ทธ ์ด์ ๊ฐ ์๋์ ๋ค๋จ์ด์ง ๊ฒ์ผ๋ก ์๊ฐํ๊ณ ์์ผ๋ฉฐ, ํ์ฌ๋ document.write()
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ํ๋ ธ๋ค๋ฉด ๊ณ ์ณ์ฃผ์ธ์.
Feature Detection
Feature Detection์ ๋ธ๋ผ์ฐ์ ๊ฐ ํน์ ์ฝ๋ ๋ธ๋ก์ ์ง์ํ๋์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ๋๋ก ํ์ฌ, ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์ ํญ์ ์ค๋ฅ ๋์ ๋ฌด์ธ๊ฐ ์๋ํ๋๋ก ํฉ๋๋ค. ์:
if ('geolocation' in navigator) {
// navigator.geolocation๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
} else {
// ๋ถ์กฑํ ๊ธฐ๋ฅ ํธ๋ค๋ง
}
Modernizr๋ Feature detection์ ์ฒ๋ฆฌ โโํ ์ ์๋ ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
Feature Inference
Feature inference๋ Feature detection๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ฅ์ ํ์ธํ์ง๋ง ๋ค๋ฅธ ํจ์๋ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ฌ์ฉํฉ๋๋ค. ์:
if (document.getElementsByTagName) {
element = document.getElementById(id)
}
์ด๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. Feature detection์ด ๋ ํ์คํฉ๋๋ค.
UA String
๋คํธ์ํฌ ํ๋กํ ์ฝ ํผ์ด๊ฐ ์์ฒญํ๋ ์ํํธ์จ์ด ์ ์ ์์ด์ ํธ์ ์์ฉ ํ๋ก๊ทธ๋จ ์ ํ, ์ด์ ์ฒด์ , ์ํํธ์จ์ด ๊ณต๊ธ ์
์ฒด ๋๋ ์ํํธ์จ์ด ๋ฒ์ ์ ์๋ณํ ์ ์๋๋ก ํด์ฃผ๋ browser-reported String์
๋๋ค. navigator.userAgent
๋ฅผ ํตํด ์ ๊ทผ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ธฐ ๊น๋ค๋ก์ฐ๋ฉฐ ์คํธํ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Chrome์ Chrome๊ณผ Safari๋ก ๋ชจ๋ ๋ณด๊ณ ๋ฉ๋๋ค. Safari๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด์๋ Safari ๋ฌธ์์ด์ด ์๋์ง์ Chrome ๋ฌธ์์ด์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ๋ง์ธ์.
Ajax(asynchronous JavaScript and XML)๋ ๋น๋๊ธฐ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ๋๋ ์น ๊ฐ๋ฐ ๊ธฐ์ ์ ์งํฉ์ ๋๋ค. Ajax๋ฅผ ์ฌ์ฉํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์กด ํ์ด์ง์ ํ๋ฉด ๋ฐ ๋์์ ๋ฐฉํดํ์ง ์์ผ๋ฉด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค. Ajax๋ ํ๋ฆฌ์ ํ ์ด์ ๋ ์ด์ด์์ ๋ฐ์ดํฐ ๊ตํ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ์นํ์ด์ง ๋ฐ ํ์ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ ํ ํ์ ์์ด ๋์ ์ผ๋ก ์ปจํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํฉ๋๋ค. ์ค์ ๋ก ์ต๊ทผ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ดํฐ๋ธ JavaScript์ ์ฅ์ ๋๋ฌธ์ XML๋์ JSON์ ์ฌ์ฉํฉ๋๋ค.
XMLHttpRequest
API๋ ๋น๋๊ธฐ ํต์ ์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ต๊ทผ์๋ fetch
API๊ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์ฅ์
๋จ์
JSONP(JSON with Padding)๋ ํ์ฌ ํ์ด์ง์์ cross-origin ๋๋ฉ์ธ์ผ๋ก์ Ajax ์์ฒญ์ด ํ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ์น ๋ธ๋ผ์ฐ์ ์์ cross-domain ์ ์ฑ ์ ์ฐํํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
JSONP๋ <script>
ํ๊ทธ๋ฅผ ํตํด cross-origin ๋๋ฉ์ธ์ ์์ฒญํ๊ณ ๋ณดํต callback
์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์(์: https://example.com?callback=printData
)๋ก ์์ฒญํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฒ๋ printData
๋ผ๋ ํจ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ํํ์ฌ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํฉ๋๋ค.
<!-- https://mydomain.com -->
<script>
function printData(data) {
console.log(`My name is ${data.name}!`)
}
</script>
<script src="https://example.com?callback=printData"></script>
// https://example.com?callback=printData ์์ ๋ก๋๋ ํ์ผ
printData({ name: 'Yang Shun' })
ํด๋ผ์ด์ธํธ๋ ์ ์ญ ๋ฒ์์ ์๋ printData
ํจ์๋ฅผ ๊ฐ์ ธ์ผ๋ง ํ๊ณ , cross-origin domain์ผ๋ก๋ถํฐ์ ์๋ต์ด ์์ ๋ ๋ ํจ์๊ฐ ํด๋ผ์ด์ธํธ์ ์ํด ์คํ๋ฉ๋๋ค.
JSONP๋ ์์ ํ์ง ์์ ์ ์์ผ๋ฉฐ, ๋ณด์ ๊ด๋ จ ์ด์๊ฐ ์์ต๋๋ค. JSONP๋ ์ค์ JavaScript๊ณ , JavaScript๊ฐ ํ ์ ์๋ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ผ๋ฏ๋ก JSONP ๋ฐ์ดํฐ ๊ณต๊ธ์๋ฅผ ์ ๋ขฐํด์ผ๋ง ํฉ๋๋ค.
์์ฆ์๋ CORS๊ฐ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ด๋ฉฐ JSONP๋ ํดํน์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ค. Handlebars, Underscore, Lodash, AngularJS, JSX. ์ ๋ AngularJS์์์ ํ ํ๋ฆฟ์ ์ข์ํ์ง ์์์ต๋๋ค. ์ง์์์์ ๋ฌธ์์ด์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ฉฐ ์คํ๊ฐ ๊ฐ์ง๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. JSX๋ JavaScript์ ๊ฐ๊น๊ณ ๋ฐฐ์์ผ ํ๋ ์๋ก์ด ๋ฌธ๋ฒ์ด ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์ข์ํฉ๋๋ค. ์์ฆ์๋, Third-party ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง ์๊ณ ํ ํ๋ฆฟ์ ๋ง๋๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ES2015 ํ ํ๋ฆฟ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
const template = `<div>My name is: ${name}</div>`
๊ทธ๋ฌ๋ ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌ๋ฆฌ ์ปจํ ์ธ ๊ฐ ์ด์ค์ผ์ดํ๋์ง ์์ผ๋ฏ๋ก ์์ ์ ๊ทผ ๋ฐฉ์์์ ์ ์ฌ์ XSS๋ฅผ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
ํธ์ด์คํ
์ ๋ํด ์ค๋ช
ํ์ธ์.ํธ์ด์คํ
์ ์ฝ๋์์ ๋ณ์ ์ ์ธ์ ๋์์ ์ค๋ช
ํ๋๋ฐ ์ฌ์ฉ๋๋ ์ฉ์ด์
๋๋ค. var
ํค์๋๋ก ์ ์ธ๋๊ฑฐ๋ ์ด๊ธฐํ๋ ๋ณ์๋ ํ์ฌ ์ค์ฝํ์ ์ต์์๊น์ง ์ฎ๊ฒจ
์ง๋๋ค. ์ด๊ฒ์ ํธ์ด์คํ
์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๊ทธ๋ฌ๋ ์ ์ธ๋ฌธ๋ง ํธ์ด์คํ
๋๋ฉฐ ํ ๋น(์๋ ๊ฒฝ์ฐ)์ ๊ทธ๋๋ก ์๊ฒ ๋ฉ๋๋ค.
์ฌ์ค ์ ์ธ์ ์ค์ ๋ก ์ด๋๋์ง ์์ต๋๋ค - JavaScript ์์ง์ ์ปดํ์ผ ์ค์ ์ ์ธ์ ํ์ฑํ๊ณ ์ ์ธ๊ณผ ํด๋น ์ค์ฝํ๋ฅผ ์ธ์ํฉ๋๋ค. ์ ์ธ์ ํด๋น ์ค์ฝํ์ ๋งจ ์๋ก ์ฎ๊ฒจ์ง๋ ๊ฒ์ผ๋ก ์๊ฐํ์ฌ ๋์์ ์ดํดํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๋ฟ์ ๋๋ค. ๋ช ๊ฐ์ง ์๋ฅผ ๋ค์ด ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
// var ์ ์ธ์ด ํธ์ด์คํ
๋ฉ๋๋ค
console.log(foo) // undefined
var foo = 1
console.log(foo) // 1
// let/const ์ ์ธ์ ํธ์ด์คํ
๋์ง ์์ต๋๋ค.
console.log(bar) // ReferenceError: bar is not defined
let bar = 2
console.log(bar) // 2
ํจ์ ์ ์ธ์ ํจ์๋ชธ์ฒด๊ฐ ํธ์ด์คํ ๋๋ ๋ฐ๋ฉด, ๋ณ์ ์ ์ธ ํํ๋ก ์์ฑ๋ ํจ์ ํํ์์ ๋ณ์ ์ ์ธ๋ง ํธ์ด์คํ ๋ฉ๋๋ค.
// ํจ์ ์ ์ธ
console.log(foo) // [Function: foo]
foo() // 'FOOOOO'
function foo() {
console.log('FOOOOO')
}
console.log(foo) // [Function: foo]
// ํจ์ ํํ์
console.log(bar) // undefined
bar() // Uncaught TypeError: bar is not a function
var bar = function() {
console.log('BARRRR')
}
console.log(bar) // [Function: bar]
DOM ์์์์ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ฉด ๋ฆฌ์ค๋๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์๋ํ ๋ค์, ํด๋น ์ด๋ฒคํธ๊ฐ ๋ถ๋ชจ์๊ฒ bubbling๋๊ณ ๋ถ๋ชจ์์ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด bubbling์ ์์์ ์ต์๋จ ๋ถ๋ชจ์์์ธ document
๊น์ง ๊ณ์์ ์ผ๋ก ๋ฐ์์ํต๋๋ค. ์ด๋ฒคํธ bubbling์ ์ด๋ฒคํธ ์์์ ์๋ ๋ฉ์ปค๋์ฆ์
๋๋ค.
attribute๋ HTML ๋งํฌ์
์ ์ ์๋์ง๋ง property๋ DOM์ ์ ์๋ฉ๋๋ค. ์ฐจ์ด์ ์ ์ค๋ช
ํ๊ธฐ ์ํด HTML์ ๋ค์ ํ
์คํธ ํ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค: <input type="text" value="Hello">
.
const input = document.querySelector('input')
console.log(input.getAttribute('value')) // Hello
console.log(input.value) // Hello
๊ทธ๋ฌ๋ ํ ์คํธ ํ๋์ "World!"๋ฅผ ์ถ๊ฐํ๋ฉด ์ด๋ ๊ฒ ๋ ๊ฒ์ ๋๋ค.
console.log(input.getAttribute('value')) // Hello
console.log(input.value) // Hello World!
๋ด์ฅ/๋ค์ดํฐ๋ธ JavaScript ๊ฐ์ฒด๋ฅผ ํ์ฅํ๋ค๋ ๊ฒ์ prototype์ ์์ฑ/ํจ์๋ฅผ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ์ฒ์์๋ ์ข์ ์๊ฐ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง ์ค์ ๋ก๋ ์ํํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ๋์ผํ contains
๋ฉ์๋๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ Array.prototype
์ ํ์ฅํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์์ํด๋ณด์ญ์์ค. ์ด๋ฌํ ๊ตฌํ์ ๋ฉ์๋๋ฅผ ์๋ก ๋ฎ์ด์ฐ๊ฒ ๋๋ฉฐ, ์ด ๋ ๋ฉ์๋์ ๋์์ด ๋์ผํ์ง ์์ผ๋ฉด ์ฝ๋๊ฐ ๋ง๊ฐ์ง ๊ฒ์
๋๋ค.
๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ํ์ฅํ ์ ์๋ ์ ์ผํ ๊ฒฝ์ฐ๋ polyfill์ ๋ง๋ค ๋์ ๋๋ค. JavaScript ์ฌ์์ ์ผ๋ถ์ด์ง๋ง, ์ค๋๋ ๋ธ๋ผ์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ ์์ ์๋ ์๋ ๋ฉ์๋์ ๋ํ ๊ณ ์ ํ ๊ตฌํ์ ์ ๊ณตํด์ผํ ๊ฒฝ์ฐ ๋ฟ์ ๋๋ค.
load
์ด๋ฒคํธ์ document DOMContentLoaded
์ด๋ฒคํธ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?DOMContentLoaded
์ด๋ฒคํธ๋ ์คํ์ผ์ํธ, ์ด๋ฏธ์ง, ์๋ธํ๋ ์ ๋ก๋ฉ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์ด๊ธฐ HTML ๋ฌธ์๊ฐ ์์ ํ ๋ก๋๋๊ณ ํ์ฑ๋๋ฉด ๋ฐ์ํฉ๋๋ค.
window
์ load
์ด๋ฒคํธ๋ DOM๊ณผ ๋ชจ๋ ์ข
์ ๋ฆฌ์์ค์ ์์
๋ค์ด ๋ก๋๋ ํ์ โโ๋ฐ์ํฉ๋๋ค.
==
์ ===
์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?==
๋ ์ถ์ ๋๋ฑ ์ฐ์ฐ์์ด๊ณ ===
๋ ์์ ๋๋ฑ ์ฐ์ฐ์์
๋๋ค. ==
์ฐ์ฐ์๋ ํ์
๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ํ์
๋ณํ์ ํ ํ์ ๋๋ฑํ์ง ๋น๊ตํ ๊ฒ์
๋๋ค. ===
์ฐ์ฐ์๋ ํ์
๋ณํ์ ํ์ง ์์ผ๋ฏ๋ก ๋ ๊ฐ์ด ๊ฐ์ ํ์
์ด ์๋ ๊ฒฝ์ฐ ===
๋ false
๋ฅผ ๋ฐํํฉ๋๋ค. ==
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌด์์ด ์ผ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
1 == '1' // true
1 == [1] // true
1 == true // true
0 == '' // true
0 == '0' // true
0 == false // true
์ ์ ์กฐ์ธ์ ํธ์์ null
๊ณผ undefined
๋ฅผ ๋น๊ตํ ๋๋ฅผ ์ ์ธํ๊ณ , ==
์ฐ์ฐ์๋ฅผ ์ ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์
๋๋ค. a == null
์ a
๊ฐ null
๋๋ undefined
์ด๋ฉด true
๋ฅผ ๋ฐํํฉ๋๋ค.
var a = null
console.log(a == null) // true
console.log(a == undefined) // true