수색…


유형

typeof 는 javascript에서 type 을 가져 오는 데 사용하는 '공식'기능이지만 일부 경우 예기치 않은 결과가 발생할 수 있습니다 ...

1. 문자열

typeof "String" 또는
typeof Date(2011,01,01)

"끈"

2. 번호

typeof 42

"번호"

3. Bool

typeof true (유효한 값 truefalse )

"부울"

4. 개체

typeof {} 또는
typeof [] 또는
typeof null 또는
typeof /aaa/ 또는
typeof Error()

"목적"

5. 기능

typeof function(){}

"기능"

6. 정의되지 않음

var var1; typeof var1

"정의되지 않음"

생성자 이름을 기준으로 객체 유형 가져 오기

하나의 typeof 연산자를 가진 object 가 타입 object 얻었을 때, 그것은 다소 낭비적인 범주에 속하게됩니다 ...

실제적으로 어떤 종류의 '객체'객체가 될지를 결정해야 할 수도 있습니다. 한 가지 방법은 객체 생성자 이름을 사용하여 실제로 객체의 맛을 얻는 것입니다. Object.prototype.toString.call(yourObject)

1. 문자열

Object.prototype.toString.call("String")

"[object String]"

2. 번호

Object.prototype.toString.call(42)

"[객체 번호]"

3. Bool

Object.prototype.toString.call(true)

"[object Boolean]"

4. 개체

Object.prototype.toString.call(Object()) 또는
Object.prototype.toString.call({})

"[object Object]"

5. 기능

Object.prototype.toString.call(function(){})

"[개체 기능]"

6. 날짜

Object.prototype.toString.call(new Date(2015,10,21))

"[대상 날짜]"

7. 정규식

Object.prototype.toString.call(new RegExp()) 또는
Object.prototype.toString.call(/foo/);

"[개체 RegExp]"

8. 어레이

Object.prototype.toString.call([]);

"[object 배열]"

9. Null

Object.prototype.toString.call(null);

"[Null 개체]"

10. 정의되지 않음

Object.prototype.toString.call(undefined);

"[정의되지 않은 개체]"

11. 오류

Object.prototype.toString.call(Error());

"[개체 오류]"

객체의 클래스 찾기

객체가 특정 생성자에 의해 생성되었는지 아니면 상속받은 생성자인지를 확인하려면 instanceof 명령을 사용할 수 있습니다.

//We want this function to take the sum of the numbers passed to it
//It can be called as sum(1, 2, 3) or sum([1, 2, 3]) and should give 6
function sum(...arguments) {
    if (arguments.length === 1) {
        const [firstArg] = arguments
        if (firstArg instanceof Array) { //firstArg is something like [1, 2, 3]
            return sum(...firstArg) //calls sum(1, 2, 3)
        }
    }
    return arguments.reduce((a, b) => a + b)
}

console.log(sum(1, 2, 3))   //6
console.log(sum([1, 2, 3])) //6
console.log(sum(4))         //4

프리미티브 값은 모든 클래스의 인스턴스로 간주되지 않습니다.

console.log(2 instanceof Number)        //false
console.log('abc' instanceof String)    //false
console.log(true instanceof Boolean)    //false
console.log(Symbol() instanceof Symbol) //false

자바 스크립트에서 nullundefined 이외의 모든 값은 constructor 에 사용 된 함수를 저장하는 constructor 속성을 가지고 있습니다. 이것은 프리미티브에서도 작동합니다.

//Whereas instanceof also catches instances of subclasses,
//using obj.constructor does not
console.log([] instanceof Object, [] instanceof Array)           //true true
console.log([].constructor === Object, [].constructor === Array) //false true

function isNumber(value) {
    //null.constructor and undefined.constructor throw an error when accessed
    if (value === null || value === undefined) return false
    return value.constructor === Number
}
console.log(isNumber(null), isNumber(undefined))                  //false false
console.log(isNumber('abc'), isNumber([]), isNumber(() => 1))     //false false false
console.log(isNumber(0), isNumber(Number('10.1')), isNumber(NaN)) //true true true


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow