instanceof, typeof, & Object.prototype.toString

11863 단어 instanceof

 

instanceof: 


 
1. 왼쪽 조작수는 하나의 대상이고 오른쪽 조작수는 대상을 표시하는 클래스이다. 만약에 왼쪽 대상이 오른쪽 클래스의 실례라면 표현식은true를 되돌려주고 그렇지 않으면false를 되돌려준다.
2. 왼쪽의 조작수가 대상이 아니라면false로 되돌아갑니다
3. 오른쪽의 조작수가 함수가 아니면 버퍼링 유형 오류 이상
4、obj instanceoff를 계산할 때 f.prototype을 계산한 다음에 원형 체인에서 obj를 찾습니다.obj가 f 또는 f 부류의 실례를 찾으면true로 되돌아갑니다
 
eg: 원시값과 대상의 차이에 주의하십시오
//instanceof

var  data = [1, 2, 3, 4, 5];

data instanceof Array; //true

data instanceof Object; //true

data instanceof Number; //false

 
1 instanceof Number; //false

1 instanceof Object; //false



var num = 1;

num instanceof Number; //false

num instanceof Object; //false



var num = Number(1);  

num instanceof Number;  //false

num instanceof Object; //false



Number(1) instanceof Number; //false

Number(1) instanceof Object;  //false



var num1 = new Number(1);

num1 instanceof Number; //true

num1 instanceof object; //true

 
null instanceof Object; //false;

undefined instanceof Object; //false;



var  data = [1, 2, 3, 4, 5];

var bb = {};

var cc = function(){};

data instanceof bb; //TypeError: Expecting a function in instanceof check, but got #<Object>

data instanceof cc; //false

 

 typeof


typeof a: typeof 이후의 조작수는 임의의 종류일 수 있으며, 반환값은 조작수 형식의 문자열입니다
//typeof



typeof undefined;  // "undefined"

typeof null;  // "object"



typeof ture;  // "boolean"

typeof false; // "boolean"



typeof NaN; // "number"

typeof Infinity // "number"

typeof 1  //"number"

typeof "abc"; //"string"



typeof function(){}; // "function"

typeof RegExp; //"function"

typeof Math; //"object"

 

Object.prototype.toString


 
기본 toString 방법: Object.prototype.toString()이 [object class]로 되돌아와 대상의 유형 정보를 얻을 수 있습니다
eg:
var data = [1, 2, 3, 4, 5];

Object.prototype.toString.call(data);  //"[object Array]"

 
우리는 다음과 같은 함수 반환 대상의 유형 정보를 정의할 수 있다
function classof(obj){

    if(obj === null){

        return "Null";

    }

    if(obj === undefined){

        return "Undefined";

    }

    return Object.prototype.toString.call(obj).slice(8, -1);

}

 
테스트:
classof(null); // "Null"

classof(undefined) // "Undefined"

classof("abc"); // "String"

classof([]); // "Array"

classof({}); //"Object"

classof(//); // SyntaxError: Unexpected token }

classof(/,/); //"RegExp"

classof(new Date()); //"Date"



classof(window); // "global"

classof(function(){}); // "Function"

function f(){}; classof(new f()); //"Object"

 

주의 사항:


1. 자바스크립트에서 원시 값(숫자, 문자열, 볼 값,null,undefined)을 제외한 것은 모두 대상이다
2. 자바스크립트는 정수치와 부동점 수치를 구분하지 않는다
3. 모든 Javascript 값은 부울 값으로 변환할 수 있고 아래의 값은false로 변환할 수 있다
undefined



null



0 / -0



NaN



""

따라서 대상이 null인지 아닌지를 검사하려면 직접if(obj)가 아닌 다음과 같은 방식을 사용해야 한다.
if(obj !== null)

 
4,null은 키워드로 특수한 대상 값으로 이해할 수 있지만 typeofnull에 대해서는 "object"
 
5、undefined는 정의되지 않은 것을 나타내는 데 사용되며 키워드가 아닙니다.typeofundefined는 "undefined"로 되돌아옵니다
조회할 때 반환undefined가 존재하지 않으면 함수에 반환값이undefined로 되돌아오지 않습니다.
undefined는 미리 정의된 전역 변수입니다.ECMAScript3에서는 읽기 및 쓰기 변수, ECMAScript5에서는 읽기 전용 변수
null == undefined; //true



null === undefined;  //false;

null undefined , null undefined . []

 
6,null과undefined는 어떤 대상이 되기를 기대하는 곳에서든 유형 오류 이상을 일으킬 수 있습니다. 문자열, 숫자, 브리 값과 구별됩니다. 다음 항목을 보십시오.
 
7. 문자열, 숫자와 부울 값은 대상이 아니지만 그들의 속성이나 방법을 읽을 때 대상과 똑같이 표현되고 그들의 방법과 속성을 사용할 때 그에 대응하는 구조 함수를 통해 임시 대상을 만든다. 예를 들어 다음과 같다.
var string = "wish you happy";

var words = string.split(" ");



 string javascript new String(string);

그러나 등록 정보에 값을 지정하면 다음과 같은 관련 작업이 무시됩니다.
var string = "wish you happy";

string.length = 17;

string.len = 14;

console.log(string.length);  //14

console.log(string.len);  //undefined

 
8. 주의해야 할 유형 변환:
// 



undefined: "undefined"



null: "null"



true: "true"



false: "false"



0: "0"



-0: "0"



NaN: "NaN"



Infinity: "Infinity"



-Infinity: "-Infinity"



[]: ""



[1, 2, 3]: "1,2,3"

 
// 



undefined: NaN



null: 0



"": 0



"1.2": 1.2



"wish": NaN

 
 

좋은 웹페이지 즐겨찾기