typeof
ECMAScript에는 정의되지 않음, Null, 부울, 숫자 및 문자열의 5가지 기본 유형이 있습니다. 우리 모두는 typeof 연산자를 사용하여 변수의 유형을 찾을 수 있다는 것을 알고 있지만 참조 유형 변수의 경우 <a href="http://www.php.cn/%EB%A7%8C%20%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4.%20wiki/60.html" target="_blank">object<code><a href="http://www.php.cn/wiki/60.html" target="_blank">object</a>
,也就是说typeof只能正确识别基本类型值变量。
var a = "abc"; console.log(typeof a); // "string"var b = 123; console.log(typeof b); // "number"var c = true; console.log(typeof c); // "boolean"var d = null; console.log(typeof d); // "object"var f = undefined; console.log(typeof f); // "undefined"var g; console.log(typeof g); // "undefined"console.log(typeof x); // "undefined"
您也许会问,为什么 typeof 运算符对于 null 值会返回 "object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
最后一个比较奇怪,typeof一个不存在的变量x
居然返回了"object"而不是"undefined"。
我们在来如下代码:
var a = function() { }; console.log(typeof a); // "function"var b = [1,2,3]; console.log(typeof b); // "object"var c = { }; console.log(typeof c); // "object"
对于数组和对象都返回"object",因此我们日常开发中一个常见需求就是如何判断变量是数组还是对象。
类型判断
类型判断,一般就是判断是否是数组,是否是空对象。这是针对这个需求,我日常用过或见过的判断方法
判断是否是数组
有数组:var a = [1,2,3,4,5];
方法一:
toString.call(a); // "[object Array]"
方法二:
a instanceof Array; //true
方法三:
a.constructor == Array; //true
第一种方法比较通用,也就是Object.prototype.toString.call(a)
的简写。
instanceof
和constructor
判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个a,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor
会返回false
;
var a = [1,2,3,4,5]; console.log(toString.call(a)); // "[object Array]" console.log(a instanceof Array); //trueconsole.log(a.constructor == Array); //true
判断是否是空对象
有变量:var obj = {};
, 이는 typeof가 기본 유형 값 변수만 올바르게 식별할 수 있음을 의미합니다.
JSON.stringify(obj); // "{}"
typeof 연산자가 null 값에 대해 "객체"를 반환하는 이유가 궁금할 수 있습니다. 이는 사실 당시 ECMAScript에서 채택한 JavaScript
의 원래 구현에 발생한 버그였습니다. 이제 null은 객체에 대한 자리 표시자로 간주되어 이러한 모순을 설명하지만 기술적으로는 기본적으로 여전히 원래 값.
마지막은 이상합니다. 존재하지 않는 변수 x
의 유형은 실제로 "정의되지 않음" 대신 "개체"를 반환합니다.
다음 코드가 나옵니다.
if(obj.id){ //如果属性id存在....}
배열과 객체 모두에 대해 "객체"를 반환하므로 일상적인 개발에서 일반적으로 필요한 것은 변수가 배열인지 객체인지 확인하는 방법입니다.
타입 판단
🎜타입 판단은 일반적으로 배열인지 빈 객체인지 판단하는 것입니다. 이 요구 사항에 대해 제가 매일 사용하거나 본 판단 방법입니다🎜🎜배열인지 확인하려면🎜🎜배열이 있습니다:var a = [1,2,3,4,5];< /code>🎜 🎜방법 1: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">function isEmptyObject(e) { var t; for (t in e) return !1; return !0 } //trueisEmptyObject(obj); //falseisEmptyObject({ "a":1, "b":2});</pre><div class="contentsignin">로그인 후 복사</div></div>🎜방법 2: 🎜rrreee🎜방법 3: 🎜rrreee🎜첫 번째 방법은 더 일반적이며 <code>Object.prototype.toString.call(a)의 약어입니다. 코드>. 🎜🎜<code>instanceof
및 constructor
로 판단되는 변수는 현재 페이지에서 선언되어야 합니다. 예를 들어 페이지(상위 페이지)에는 Framework🎜, 프레임은 페이지(하위 페이지)를 참조하고 하위 페이지에서 a를 선언하고 상위 A에 할당합니다. 페이지의 변수를 판단할 때 Array == object.constructor
는 false
를 반환합니다. 🎜rrreee🎜빈 개체인지 판단하세요🎜🎜변수가 있습니다. var obj = {};
🎜🎜방법 1: 🎜rrreee🎜 JSON 객체로 변환하여 빈 중괄호인지 확인합니다.🎜🎜방법 2: 🎜rrreee🎜이 방법은 비교적 간단하고 가장 사람들은 그것을 생각할 수 있기 때문에 전제는 객체에 특정 속성이 있다는 것을 아는 것입니다. 🎜🎜방법 3: 🎜rrreee🎜이 방법은 jQuery의 isEmptyObject() 메서드를 구현한 것입니다. 🎜위 내용은 JavaScript의 typeof 및 유형 판단 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!