2017-10-22 46 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'))