JS 형식 검사
1. typeof
기본 형식 과 function 검 측 에 적합 합 니 다. null 에 실 패 했 습 니 다.
2. instanceof
사용자 정의 대상 에 적합 하 며, 원생 대상 을 검사 하 는 데 도 사용 할 수 있 으 며, 서로 다른 window 및 iframe 간 검 측 시 효력 을 잃 을 수 있 습 니 다.
3. Object.prototype.toString.apply()
내 장 된 대상 과 기본 요소 에 적합 합 니 다. null 과 undefined 가 실 효 됩 니 다.
/ / Object. prototype. toString. apply (null) 는 IE6 / 7 / 8 에서 "[object Object]" 를 되 돌려 줍 니 다.
4. constructor
5. duck type
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb18030">
<title>Untitled Document</title>
</head>
<body>
<script type="text/javascript">
function getType(obj) {
var retType ;
if(null === obj) {
retType = 'null';
} else if('object' === typeof obj) {
//String/Boolean/Number/Date/window
var typeStr = Object.prototype.toString.apply(obj);
retType = typeStr.substring(8, typeStr.length - 1);
} else {
retType = typeof obj;
}
return retType.toUpperCase();
}
/*
* param1 Array
* param2 Array
* return true or false
*/
function judgeArrayWithoutOrder(arr1, arr2) {
var len1 = arr1.length,
len2 = arr2.length;
if(len1 != len2) return false;
var markArr = [];
for(var i = 0; i < len1; i ++){
markArr.push(true);
}
var sameCount = 0;
for(var i = 0; i < len1; i ++){
var arr1Itr = arr1[i];
for(var j = 0; j < len1; j ++){
if(markArr[j]) {
if(arr1Itr == arr2[j]) {
markArr[j] = false;
sameCount ++;
break;
}
}
}
}
return sameCount == len1;
}
/*
* param1 Array
* param2 Array
* return true or false
*/
function arraysSimilar(arr1, arr2){
if('ARRAY' != getType(arr1) || 'ARRAY' != getType(arr2)) {
return false;
}
var len1 = arr1.length,
len2 = arr2.length;
if(len1 != len2) return false;
var arr1Types = [],
arr2Types = [];
for(var i = 0; i < len1; i ++) {
arr1Types.push(getType(arr1[i]));
arr2Types.push(getType(arr2[i]));
}
return judgeArrayWithoutOrder(arr1Types, arr2Types);
}
</script>
<script src="testData.js"></script>
</body>
</html>
TestData.js
var result=function(){
//
var cases=[{
arr1:[1,true,null],
arr2:[null,false,100],
expect:true
},{
arr1:[function(){},100],
arr2:[100,{}],
expect:false
},{
arr1:[null,999],
arr2:[{},444],
expect:false
},{
arr1:[window,1,true,new Date(),"hahaha",(function(){}),undefined],
arr2:[undefined,(function(){}),"okokok",new Date(),false,2,window],
expect:true
},{
arr1:[new Date()],
arr2:[{}],
expect:false
},{
arr1:[window],
arr2:[{}],
expect:false
},{
arr1:[undefined,1],
arr2:[null,2],
expect:false
},{
arr1:[new Object,new Object,new Object],
arr2:[{},{},null],
expect:false
},{
arr1:null,
arr2:null,
expect:false
},{
arr1:[],
arr2:undefined,
expect:false
},{
arr1:"abc",
arr2:"cba",
expect:false
}];
// for , arraysSimilar , “ ”, " ", arraysSimilar , , 。
for(var i=0;i<cases.length;i++){
if(arraysSimilar(cases[i].arr1,cases[i].arr2)!==cases[i].expect) {
document.write(" !case"+(i+1)+" !arr1="+JSON.stringify(cases[i].arr1)+", arr2="+JSON.stringify(cases[i].arr2)+" "+cases[i].expect);
return false;
}
}
return true;
}();
document.write(" :"+(result?" ":" "));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.