우리는 아름다운 코드에 쉽게 매료되어 자신도 모르게 코드 베이스에 추가합니다. 그러나 나는 그들의 장점과 단점에 대해 침착하게 생각하지 않았습니다. 아니, "그게...?"라는 형태로 판단할 수 있는 부울 함수들을 모아봤습니다.
isNull: function(a){ return a === null; }, isUndefined: function(a){ return a === undefined; }, isNumber: function(a){ return typeof a === 'number'; }, isString: function(a){ return typeof a === 'string'; }, isBoolean: function(a){ return typeof a === 'boolean'; }, isPrimitive: function(b){ var a = typeof b; return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string'); }, isArray: function(a){ return proto_obj.toString.call(a) === '[object Array]'; }, isFunction: function(a){ return proto_obj.toString.call(a) === '[object Function]'; }, isPlainObject: function(o){ if (!o || o === win || o === doc || o === doc.body) { return false; } return 'isPrototypeOf' in o && proto_obj.toString.call(o) === '[object Object]'; }, isWindow: function(o){ return o && typeof o === 'object' && 'setInterval' in o; }, isEmptyObject: function(o){ for(var a in o) { return false; } return true; }
위의 isXX 시리즈 중 클래스 라이브러리에서 isUndefine이 가장 많이 사용됩니다. 예를 들어, 특정 매개변수가 전달되었는지 확인하고, 객체에 특정 속성이 있는지 확인하는 등의 작업을 수행합니다. 하지만 이 기능이 꼭 존재할 필요는 없으므로 제거했습니다. 그 이유는 다음과 같습니다.
isUndefine과 합동(===) 또는 typeof를 사용하여 함수 호출 계층을 하나 더 추가합니다. 분명히, 함수 호출을 한 단계 더 추가하는 것은 기본 연산자를 직접 사용하는 것보다 덜 효율적이지만(다소 사소하기는 하지만) isUndefed가 수만 번과 같이 여러 번 호출되는지는 여전히 분명합니다. 한번은 이 함수를 메일박스 프레임워크에 추가했는데, 성능 분석 도구에 따르면 4,000번 이상 호출되는 데 거의 1%의 시간이 걸렸습니다. 통화 시간의 1%를 차지하는 단 한 번의 판단만으로도 여전히 끔찍합니다. 물론 메일함 프레임워크의 isUndefine은 다중 계층 폐쇄의 최상위에 있으며 이에 액세스하는 데에도 시간이 더 걸립니다. 이것이 isUndefine을 포기할 정도로 충분하지 않다면 아래를 참조하세요.
함수는 일부 코드를 어느 정도 캡슐화하고 추상화합니다. 이는 좋은 코드를 구성하는 방법 중 하나이며 코드의 복잡성을 줄이는 데 도움이 됩니다. 그러나 isNull/isUndefine/isBoolean/isNumber/isString 함수에는 문장이 하나만 있고 추상화 수준이 매우 낮습니다. 따라서 함수를 캡슐화하고 추출할 필요가 없습니다.
isUndefine(a)은 === undef에 비해 몇 바이트를 절약하지 못합니다(헤헤, 이름을 더 짧게 만들 수는 있지만 가독성이 떨어집니다).
요약하자면, 클래스 라이브러리에서 기본 유형 판단을 위해 isNull/isUndefine/isBoolean/isNumber/isString을 제거했습니다. 이러한 판단이 필요한 경우에는 typeof 연산자가 직접 사용됩니다.
위 내용은 JavaScript의 변수 종류별 판단방법에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!