checking types in javascript - Lee-hyuna/33-js-concepts-kr GitHub Wiki
์๋ฌธ: Checking Types in Javascript
Javascript ๋ณ์๊ฐ ๋ฐฐ์ด์ธ์ง ํ์ธํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํด ํด๋ณธ์ ์ด ์์ต๋๊น?
๊ตฌ๊ธ ๊ฒ์์ ํ๋ฉด ํ๋ฅญํ๊ณ ๋ค์ํ ๋๋ต์ ์ป์ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ๋ถํํ๊ฒ๋ ์ ๋ต์ ์๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํ๊น์ด ์ ์ค ํ๋์ธ๋ฐ ๋ค์ํ๊ณ ๋ง์ ๊ตฌํ๋ค์ด ์์ ๋ฟ๋ง ์๋๋ผ ์ด๋ป๊ฒ ํ์ธ ํ๋์ง์ ๋ํ ๋ค์ํ ์๊ฒฌ๋ค๋ ์๋ค.
์ด ํฌ์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํ์ ์ฒดํฌ ๊ธฐ๋ฒ๊ณผ ๊ฐ๊ฐ์ ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ๋ค์ด ์กด์ฌํ๋ ์ด์ ์ ๋ํด ์ข ํฉ์ ์ผ๋ก ์ค๋ช ํ๊ณ ์ ํ๋ค.
์ฒซ์งธ๋ก typeof
์ฐ์ฐ์์ ๋ํด ์์๋ณด์. ์ด ํธ๋ฆฌํ ์ฐ์ฌ์๋ ์๋ฐ์คํฌ๋ฆฝํธํธ ๊ฐ์ 'type'์ ์ ๊ณตํ๋ค.
typeof 3 // "number"
typeof "abc" // "string"
typeof {} // "object"
typeof true // "boolean"
typeof undefined // "undefined"
typeof function(){} // "function"
์์ ๊ฒฐ๊ณผ๋ ์ํ๋ ํ์ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐํ๋์๋ค.
typeof [] // "object"
array์ ํ์
์ด object
๋ผ๊ณ ๋ฐํ๋์๋ค. ๋ญ๊ฐ ์ด์ํ์ง ์์๊ฐ?
typeof null // "object"
์ด์ ์ ๋ง ์๋ชป๋ ๊ฒ ๊ฐ์๋ณด์ธ๋ค.
typeof
๋ ๋ ์ง, RegExp, ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด, DOM ์์ ๋ฐ ๊ธฐํ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๋ํด object
๋ฅผ ๋ฐํํ ๊ฒ์ด๋ค. ๊ทธ๋์ typeof๋ ๋ค๋ฅธ ์ข
๋ฅ์ ์์ ๊ฐ์ ๊ตฌ๋ณํ๋ ๋ฐ ๊ฝค ๋ฅํ์ง๋ง, ๋ฐฐ์ด๊ณผ null์ ํฌํจํ๋ ๋ค๋ฅธ ์ข
๋ฅ์ ๊ฐ์ฒด๋ค์ ๊ตฌ๋ณํ๋ ๋ฐ ์์ด์๋ ์ ํ ์ธ๋ชจ๊ฐ ์๋ค.
instanceof
์ฐ์ฐ์๋ ๊ฐ์ฒด๊ฐ ํน์ ํ์
์ ์ธ์คํด์ค์ธ์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ค๋ค. ์ฌ๊ธฐ์ ํ์
์ด๋ ์์ฑ์๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด
function Animal(){}
var a = new Animal()
a instanceof Animal // true
๋ํ ๊ฐ์ฒด์ ์์ฑ์ ํน์ฑ์ ์ฌ์ฉํ์ฌ ์๋์ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์๋ค.
a.constructor === Animal // true
๊ทธ๋ฌ๋ ์์ฑ์ ์ ๊ฒ์ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค. ์ฒซ์งธ, prototype ์ฒด์ธ
์ ํ์ธํ์ง ์๋๋ค.
function Cat(){}
Cat.prototype = new Animal()
Cat.prototype.constructor = Cat
var felix = new Cat()
felix instanceof Cat // true
felix instanceof Animal // true
felix.constructor === Cat // true
felix.constructor === Animal // false
๋ ๋ฒ์งธ ๋ฌธ์ ๋ ์ง์ ๊ฐ์ฒด๊ฐ null์ด๊ฑฐ๋ undefined์ธ ๊ฒฝ์ฐ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ฐ์ํ๋ค.
felix = null
felix instanceof Animal // true
felix.constructor === Animal // throws TypeError
instanceof
๋ ๋ชจ๋ ๊ธฐ๋ณธ ํ์
์๋ ๋์ํ๋ค.
[1, 2, 3] instanceof Array // true
/abc/ instanceof RegExp // true
({}) instanceof Object // true
(function(){}) instanceof Function // true
๊ทธ๋ผ ์๋๋ ๋์ํ ๊น?
3 instanceof Number // false
true instanceof Boolean // false
'abc' instanceof String // false
์ด๊ฒ ์ด์ฐ๋ ์ผ์ผ๊น? instanceof
๋ ์์ ๊ฐ์๋ ๋์ํ์ง ์๋๋ค. Javascript์ ์์ ํ์
์ string
, number
, boolean
, null
, undefined
์ด๋ค. null
๊ณผ undefined
๋ฅผ ์ ์ธํ๊ณ ๋ instanceof
๋ ๋์ํ์ง ์๋๋ค๊ณ ๋งํด์ผํ๋ค. ์๋ํ๋ฉด ๋ค๋ฅธ ๊ฐ๋ค์ ์ด๋ค ๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
null instanceof Boolean // false
undefined instanceof Array // false
์์ฑ์ ์์ฑ(property)์ ํ์ธํ๋ฉด ์์ ํ์
number
, string
๊ทธ๋ฆฌ๊ณ boolean
์ ๋ํ์ฌ ๋์ํ๋ค.
(3).constructor === Number // true
true.constructor === Boolean // true
'abc'.constructor === String // true
์์ ์์ ๊ฐ ๋์ํ๋ ์ด์ ๋ ์์ ๊ฐ์ ์์ฑ์ ์ฐธ์กฐํ ๋๋ง๋ค ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด ๋ํผ๋ก ์๋์ผ๋ก ๊ฐ์ ๊ฐ์ธ๊ธฐ ๋๋ฌธ์ด๋ค.
var wrapper = new Number(3)
๊ฐ์ฒด ๋ํผ๋ก ๊ฐ์ธ๋ ๊ฒ์ ๋ด๋ถ์ ์ผ๋ก ์ผ์ด๋๋ค. ์์ ๊ฒฝ์ฐ์๋ Number
์ธ์คํด์ค๋ฅผ ๋ํผ๋ก ์ฌ์ฉํ์ง๋ง, ์ด๋ ์์ ๊ฐ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ Boolean
์ด๋ String
์ด ๋ ์๋ ์๋ค. ์ด ์์ ์์ ํ๋กํ ํ์
์ฒด์ธ์ ํตํด Number ํ๋กํ ํ์
์ ์์ฑ์ ์ป์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ช
์์ ์ผ๋ก ๋ํผ๋ก ๊ฐ์ธ๋ฉด instanceof
์ฐ์ฐ์๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋ค.
new Number(3) instanceof Number // true
new Boolean(true) instanceof Boolean // true
new String('abc') instanceof String // true
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ ๊ฒ์ ํด๋น ์์๊ฐ์ด ์ด๋ค ํ์ ์ ๊ฐ์ธ์ง ์๊ณ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํ ๊ฒ์ด๋ค.
instanceof
๋ ๋๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก๋ค. ๋ค๋ฅธ window์์ ์ค๋ ๊ฐ์ฒด๋ฅผ ํ
์คํธํ๋ ค๊ณ ํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ฌ๊ธฐ์ ๋ค๋ฅธ window๋ <iframe>
, <frame>
๋๋ ํ์
์๋์ฐ๋ฅผ ์๋ฏธํ๋ค.
var iframe = document.createElement('iframe')
document.body.appendChild(iframe)
var iWindow = iframe.contentWindow // get a reference to the window object of the iframe
iWindow.document.write('<script>var arr = [1, 2, 3]</script>') // create an array var in iframe's window
iWindow.arr // [1, 2, 3]
iWindow.arr instanceof Array // false
์์ ์์ ์์ iframe ์ปจํ
์คํธ ์์ arr ๋ณ์๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ ๋ฐฐ์ด [1, 2, 3]์ ํ ๋นํ๋ค. ๊ทธ๋ฌ๋ arr ๋ณ์๊ฐ Array์ ์ธ์คํด์ค ์ธ์ง ํ์ธํ์ false
๋ฐํํ๋ค. ์ด์ ๊ฐ ๋ญ๊น?
Array === iWindow.Array // false
iframe ๋ฐฐ์ด์ ์ฐ๋ฆฌ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์๋๋ค. ์ด๊ฒ์ ๋ชจ๋ ๋ด์ฅ ๊ฐ์ฒด์ ํด๋๋ค. ๋ชจ๋ ๋ ๊ฐ์ง ๋ฒ์ ์ด ์กด์ฌํ๋ค. ์ฆ, ํํ์ฐ์ฃผ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ณด๋ฉด๋๋ค.
์ด๊ฒ์ iframe ๋ด์์ ์์ฑ๋ ๋ฐฐ์ด์ด iframe๋ด์ ๋ฐฐ์ด ์์ฑ์์ ์ธ์คํด์ค์ผ ๋ฟ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
iWindow.arr instanceof iWindow.Array // true
open()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ window์๋ ๋์ผํ ํ์์ด ๋ฐ์ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ปค๋ฎค๋ํฐ ๋ด์์ instanceof
์ฌ์ฉ์ด ๋ค์ ์ ํ๋๋๊ฒ์ ์ด cross-window ๋ฌธ์ ๋๋ฌธ์ด๋ค.
typeof
๋ instanceof
์ ์์ ๋ ๋ง์กฑ์ค๋ฝ์ง ์๊ธฐ ๋๋ฌธ์, ๋ง์ ์ฌ๋๋ค์ด ๋ํ์ดํ์ ์์กดํ๋ค. ๋ํ์ดํ์ ํ๋์ ์ ๊ฒํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ํ์ดํ: .๋ง์ฝ ๊ทธ๊ฒ์ด ์ค๋ฆฌ์ฒ๋ผ ๋ณด์ด๊ณ ์ค๋ฆฌ์ฒ๋ผ ์ด๋ค๋ฉด, ๊ทธ๊ฒ์ ๋ด๊ฐ ์๊ฐํ๋ ํ ์ค๋ฆฌ๋ค.
๋๋ฌธ์ ๋ํ์ดํ์ ์ฌ์ฉํ isArray๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
// source: http://forums.devshed.com/javascript-development-115/javascript-test-whether-a-variable-is-array-or-not-33051.html
function isArray(obj){
return (typeof(obj.length)=="undefined") ?
false:true;
}
๋๋
// source: http://www.hunlock.com/blogs/Ten_Javascript_Tools_Everyone_Should_Have
function isArray(testObject) {
return testObject &&
!(testObject.propertyIsEnumerable('length')) &&
typeof testObject === 'object' &&
typeof testObject.length === 'number';
}
jQuery์์ ๊ฐ์ฒด๊ฐ ์๋์ฐ์ธ์ง ํ์ธํ๋ ํจ์๋ ์๋์ ๊ฐ๋ค.
isWindow: function( obj ) {
return obj && typeof obj === "object" && "setInterval" in obj;
}
isWindow ํจ์๋ ์๋์ ๊ฐ์ด true๋ฅผ ๋ฐํํ๋๋ก ์์ผ ์ ์๋ค.
$.isWindow({setInterval: 'bah!'}) // true
๋ํ์ดํ์ ๋ฌธ์ ์ ์ ์๋์ ๊ฐ๋ค.
- ๋ถ์ ํํ๋ค.
- ํ ์คํธ ๋์์ property ์งํฉ์ ์์์ ์ด๋ฏ๋ก, ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ํ์ดํ์ ์ํํ๋ ํด๋น ๋ฐฉ๋ฒ์ ๋์ํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์๋ค.
๊ทธ๋ ๊ธฐ๋๋ฌธ์, ๋ํ์ดํ์ ๋ณ๋ก ์ข์ํ์ง ์๋๋ค.
Object.prototype.toString ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ํ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
Object.prototype.toString.call(3) // "[object Number]"
Object.prototype.toString.call([1, 2, 3]) // "[object Array]"
Object.prototype.toString.call({}) // "[object Object]"
์ด ๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉ๋์ง ์๋๋ค. ํ๋กํ ํ์ ์ฒด์ธ์ ์๋ Array.prototype.toString, Number.prototype.toString ๋ฑ์ ๋ ๋ค๋ฅธ toString๋ฉ์๋๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋น ๋ฉ์๋๋ ๋ค์ดํฐ๋ธ ํ์ ์ ํ์คํ ๊ตฌ๋ถํ์ง๋ง ์ฌ์ฉ์ ์ ์ ํ์ ์์ ๋ชจ๋ "[object Object]"๋ฅผ ๋ฐํํ๋ค.
Object.prototype.toString.call(new Animal) // "[object Object]"
๊ทธ๋ฌ๋ ์ด๊ฑด ๋ค๋ฅธ window ์ปจํ ์คํธ์์๋ ๋์ํ๋ค.
Object.prototype.toString.call(iWindow.arr) === "[object Array]" // true
IE์ ๋ค๋ฅธ window(popup ๊ฐ์)๋ ์์ธ๋ก ํ๋ค.
var pWindow = open("")
pWindow.document.write('<script>var arr = [1, 2, 3]</script>')
Object.prototype.toString.call(pWindow.arr) // IEd์์ "[object Object]" ๋ฐํํ๋ค. ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ "[object Array]"๋ฅผ ๋ฐํ
์ด๊ฒ์ ์ด์ํ๋ค. ์๋ํ๋ฉด iframe์์๋ ์ ์์ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ฐฉ๋ฒ์ IE ๋ฒ๊ทธ์๋ ๋ถ๊ตฌํ๊ณ ๋ค์ดํฐ๋ธ ํ์ ์ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ ํธ๋๋ ๋ฐฉ๋ฒ์ด ๋์๋ค. (์ด์ฐจํผ ์๋ฌด๋ ํ์ ์ฐฝ์ ์ฌ์ฉํ์ง ์์ผ๋..)
ํ์
์ ๋ณด๋ฅผ ํ์ธํ๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ Function.prototype.toString
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
Function.prototype.toString.call((3).constructor)
// "function Number() {
// [native code]
// }"
์ด ๋ฉ์๋๋ ํจ์์ ์์ ํ source๋ฅผ ์ ๊ณตํ๋ค. ๋ค์ดํฐ๋ธ ํจ์์ ๊ฒฝ์ฐ, ๋ด๋ถ์ "[native code]"๋ผ๊ณ ๋์ด์๋ค. ์๋์ ๋์ฐ๋ฏธ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์์ ์ด๋ฆ์ ํ์ฑํ์ฌ ๊ฐ์ฒด์ ํ์ ์ ์์๋ผ ์ ์๋ค.
function type(obj){
var text = Function.prototype.toString.call(obj.constructor)
return text.match(/function (.*)\(/)[1]
}
type("abc") // "String"
์ด ๋์ฐ๋ฏธ ํจ์(type)๋ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด์์๋ ์ฌ์ฉํ ์ ์๋ค.
type(new Animal) // "Animal"
์ด ์ฝ๋๋ instanceof
์ ๋ง์ฐฌ๊ฐ์ง๋ก IE์ ํ์
์๋์ฐ์ ๋ฌธ์ ๊ฐ ์๋ค. ์๋ํ๋ฉด Function.prototype.toString
์ ๋ค๋ฅธ ํํ์ฐ์ฃผ์์ ์จ ์์ฑ์์ ํจ๊ป ๋ถ๋ฅด๋ฉด,์์ฑ์๋ ๊ฐ์ฒด(["object Object]")๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฑฐ๋ถํ๊ณ "Function expected" ์๋ฌ๋ฅผ ๋ด๋ฑ๋๋ค. ์ด ๋ฌธ์ ๋ toString ๋ฉ์๋๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ฐธ์กฐํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์๋ค.
function type(obj){
var text = obj.constructor.toString()
return text.match(/function (.*)\(/)[1]
์ด์ , ์์ ํจ์๋ IE์ ํ์ ์๋์ฐ์๋ ์ ์ฉ๋๋ค! ํ์ง๋ง ์ด ์์ ์ ๋ค๋ฅธ ๋ฌธ์ ์ ์ ์ผ๊ธฐํ๊ธฐ๋ ํ๋ค.
Array.toString = function(){ return "function NotArray(){ }" }
type([1,2,3]) // "NotArray"
๊ทธ๋ผ์๋ ๊ฝค ๊ด์ฐฎ์ ๋ณด์ธ๋ค. ์ด์ ์ฌ์ฉ์ ์ ์ ํ์ ์ผ๋ก ์ ์ ๋์๊ฐ๋ณด์. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋์ผํ ์ด๋ฆ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ฌ์ฉ์ ์ ์ ํ์ ์ ๊ตฌ๋ณํ ์ ์๋ค.
var f = function Animal(){ "something" }
var g = function Animal(){ "something entirely different" }
type(new f) // "Animal"
type(new g) // "Animal"
์ด๋ฌํ ์ด์ ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ์ ์ ์ ํ์
์ ํํ์ฌ instanceof
๋ณด๋ค ๋ชปํ๋ค. ์ด ์ ๊ทผ๋ฐฉ์์ ๋ ๋ค๋ฅธ ๋ถ๋ช
ํ ๋ฌธ์ ๋ ์ฑ๋ฅ์ด๋ค.
์ง๊ธ๊น์ง DOM ์์์ ํธ์คํธ ๊ฐ์ฒด์ ๋ํ ํ์ ์ ๊ฒ์ ๋ํด ์ธ๊ธํ์ง ์์๋ค. ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ์ดํ์ ์ ์ธํ๊ณ , ์์์ ์ธ๊ธํ ์ด๋ค ๋ฐฉ๋ฒ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ IE7 ์ดํ๋ฅผ ์ ์ธํ๋ฉด ์ค์ ๋ก ๋์ํ๊ฒ ํ ์ ์๋ค. ์๋์ ์ถ๋ ฅ์ Tutti๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์๋ค.
> var div = document.createElement('div')
> typeof div
Safari 5.0 => object
Firefox 3.6 => object
IE 7.0 => object
IE 8.0 => object
Opera 11.01 => object
> div instanceof Element
Safari 5.0 => true
Firefox 3.6 => true
IE 7.0 => Error: 'Element' is undefined
IE 8.0 => true
Opera 11.01 => true
> div instanceof HTMLDivElement
Safari 5.0 => true
Firefox 3.6 => true
IE 8.0 => true
IE 7.0 => Error: 'HTMLDivElement' is undefined
Opera 11.01 => true
์ฒซ์งธ๋ก, typeof
๋ ์์๋๋ก ์ธ๋ชจ ์์ด๋ณด์ธ๋ค. ๋ค์์ผ๋ก, IE 7์ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ div๊ฐ HTMLDivElement๋ฟ๋ง ์๋๋ผ Element์ ์ธ์คํด์ค์์ ์ธ์ํ๋ค. IE7์์๋ ์์ฑ์๊ฐ ์กด์ฌํ์ง๋ ์๋๋ค.
> Object.prototype.toString.call(div)
Safari 5.0 => [object HTMLDivElement]
Firefox 3.6 => [object HTMLDivElement]
IE 7.0 => [object Object]
IE 8.0 => [object Object]
Opera 11.01 => [object HTMLDivElement]
IE์์ Object.prototype.toString
๊ฒฐ๊ณผ๋ ์ ์ฉํ์ง ์๋ค.
> div.constructor.toString()
Safari 5.0 => [object HTMLDivElementConstructor]
Firefox 3.6 => [object HTMLDivElement]
IE 7.0 => Error: 'div.constructor' is null or not an object
IE 8.0 => [object HTMLDivElement]
Opera 11.01 => function HTMLDivElement() { [native code] }
Function.prototype.toString
๋ IE8์์ ์ ์ฉํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฝ๊ฐ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
> typeof window
Safari 5.0 => object
Firefox 3.6 => object
IE 8.0 => object
IE 7.0 => object
Opera 11.01 => object
> window instanceof Window
Safari 5.0 => ReferenceError: Can't find variable: Window
Firefox 3.6 => true
IE 8.0 => true
IE 7.0 => Error: 'Window' is undefined
Opera 11.01 => ReferenceError: Undefined variable: Window
> Object.prototype.toString.call(window)
Safari 5.0 => [object DOMWindow]
Firefox 3.6 => [object Object]
IE 8.0 => [object Object]
IE 7.0 => [object Object]
Opera 11.01 => [object Window]
> window.constructor
Safari 5.0 => function Object() {
[native code]
}
Firefox 3.6 => function Object() {
[native code]
}
IE 8.0 => [object Window]
IE 7.0 => undefined
Opera 11.01 => function Object() { [native code] }
window
์ ์ฌ์ฉํ๋ฉด ์ด ๋ฉ์๋ ๋ค์ค ์ด๋๊ฒ๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ์ง ์์๋ค. ์ํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํธ์คํธ ๊ฐ์ฒด๋ฅผ ํ
์คํธํด ๋ณผ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ํ
์คํธ๋ ๋ถ๊ฐ๋ฅํด ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋, ์ด ํ
์คํ
์์ XMLHttpRequest ๊ฐ์ฒด ๋ฐ DOM ๋ฐ ํ
์คํธ ์์๋ IE7 ์ดํ์ ๋ํ ์ง์์ ์ค๋จํ ์ ์๋ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ ์ ํ์ธํ๋ ๊ฒ์ ๋งค์ฐ ์๋ง์ด๋ค. ๋น๋ก ์ด๋ค ํน์ ํ ์ ํ์ ํ์ธํ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ ์์ง๋ง, ๊ทธ๊ฒ์ ํ์คํ ์ฌ๋ฌ ์ ํ์ ๊ฑธ์ณ ์ผ๊ด์ฑ์ด ์๊ณ , ์๋ง๋ ๊ทธ ๊ณผ์ ์์ ๋ง์ ์ ํ์ ํด์ผ๋ง ํ์ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ๋ชจ๋ ๋ค๋ฅธ ์ ํ์ฌํญ๋ค์ ๋ํด ์๋ ๊ฒ์ ๋ํด ๋์์ ์ค ๊ฒ์ด๋ค. ๋ค๊ฐ์ค๋ ํฌ์คํ ์์ ์์ ์ฝ๋ ์กฐ๊ฐ์ผ๋ก ์ด ๋ชจ๋ ๊ฒ์ ์ฝ๊ฒ ๋ง๋ค๋๋ก ๋ ธ๋ ฅํ ๊ฒ์ด๋ค.