2017-10-22 50 views
0

我有dynamic codeself creating。在certain conditions下,只有某些類型允許通過某些if statements如何通過原型傳遞undefined和null?

什麼當前工作

  • 對象
  • 布爾
  • 符號
  • 功能

如果代碼試圖檢查它是否是一個nullundefined一切什麼打破了代碼

  1. 不確定

分崩離析。或者如果它是nullundefined並且我想檢查它是否是一個字符串,它就會崩潰。

我想知道是否有辦法通過nullundefined


演示

演示工作,直到它準備好檢查null。

function type(obj) { 
 
    obj = Object.prototype.toString.call(obj).split(' ')[1].replace(']', ''); 
 
    return obj; 
 
} 
 
String.prototype.is = function(what) { 
 
    if (/\b(string|str|s)\b/i.test(what)) { 
 
    return true; 
 
    } 
 
    return false; 
 
}; 
 
Array.prototype.is = function(what) { 
 
    if (/\b(array|arr|a)\b/i.test(what)) { 
 
    return true; 
 
    } 
 
    return false; 
 
}; 
 
Object.prototype.is = function(what) { 
 
    let results = type(this) 
 
    let regex = new RegExp('\\b' + results + '\\b', 'i') 
 
    if (regex.test(what)) { 
 
    return true; 
 
    } 
 
    return false; 
 
}; 
 

 
unknown1 = 'hello world' 
 
unknown2 = /a/g 
 
unknown3 = null // Failed to pass through prototype - suppose to log true 
 
unknown4 = undefined // Failed to pass through prototype - suppose to log false 
 
unknown5 = 9 
 

 
console.log(unknown1.is('string or regexp')) 
 
console.log(unknown2.is('object')) 
 
console.log(unknown3.is('null')) 
 
console.log(unknown4.is('number')) 
 
console.log(unknown5.is('string, number, or object'))

+3

'null'和'undefined'是原語做不hav e包裝對象,所以你不能設置一個原型方法,因此你爲什麼得到一個無法讀取屬性錯誤 –

+0

是否有可能包裝原型在'if語句'並返回'null'在它被破壞之前? –

+0

請勿爲此使用原型方法。 – Bergi

回答

0

更短,更快的解決方案

也...不破

function type(obj) { 
 
    return Object.prototype.toString.call(obj).split(' ')[1].replace(']', ''); 
 
} 
 

 
function is(obj, what) { 
 
    let regex = new RegExp('\\b(' + type(obj) + ')\\b', 'i'); 
 
    if (regex.test(what)) {return true;} 
 
    return false; 
 
} 
 

 
unknown1 = 'hello world' 
 
unknown2 = /a/g 
 
unknown3 = null 
 
unknown4 = undefined 
 
unknown5 = 9 
 
unknown6 = function name() {} 
 
unknown7 = true 
 
unknown8 = {} 
 

 

 
console.log(is(unknown1, 'a string or function')) 
 
console.log(is(unknown2, 'a regexp')) 
 
console.log(is(unknown3, 'null, regexp, or string')) 
 
console.log(is(unknown4, 'string')) 
 
console.log(is(unknown5, 'string')) 
 
console.log(is(unknown6, 'regexp')) 
 
console.log(is(unknown7, 'a boolean')) 
 
console.log(is(unknown8, 'an object'))