首頁 > web前端 > js教程 > 主體

JavaScript各變數類型的判斷方法

黄舟
發布: 2016-12-20 15:34:56
原創
1053 人瀏覽過

我們很容易被漂亮的程式碼吸引,也不知不覺的在自己的程式碼庫中加入這些。卻沒有冷靜的想過它們的優劣。不,我就收集了一系列形如 "是否為…?" 的判斷的boolean函數。

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系列中,isUndefined在類別庫中用的最多。如判斷是否傳入了某個參數,判斷物件是否擁有某個屬性等等。但這個函數是不必存在,我已將其移除。理由如下

isUndefined 與 使用全等(===)或typeof 多了一層函數呼叫。很明顯多一層函數呼叫比直接使用原生的運算子效率會低(雖然有些微不足道),但如果isUndefined呼叫次數很多如上萬次還是很 明顯的。我曾經在郵箱框架中加入了該函數,呼叫次數有4000多次,從效能分析工具看佔用了近1%的時間。僅僅一個判斷佔1%的呼叫時間還是很可怕的。當 然,郵箱框架內的isUndefined處在多層閉包的頂層,存取其也會佔用較多時間。如果這條還不足以讓你放棄isUndefined,請看下面。

函數從一定程度上是對一些程式碼的封裝,抽象化。是組織良好程式碼的方式之一,且有利於降低程式碼的複雜性。但isNull/isUndefined/isBoolean/isNumber/isString函數內僅有一句,抽象層次很低。因此完全不必封裝而提取出一個函數。

isUndefined(a) 與 a === undefined相比並不會節省幾個位元組(呵,你可以命名的更短但損失了可讀性)。

綜上,我去掉了類別庫中對基本型別判斷的isNull/isUndefined/isBoolean/isNumber/isString,需要用到這些判斷的時候直接使用typeof運算子等。

 以上就是JavaScript各變數類型的判斷方法 的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)! 


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板