2017-10-22 12 views
0

dynamic codeself creatingです。 certain conditionsの下では、特定の種類のみが許可されており、一部はif statementsです。現在
プロトタイプで未定義とnullを渡すにはどうすればよいですか?

  • オブジェクト
  • ブール
  • 文字列
  • シンボル
  • 機能
をどのような作品

コードは、それがnullまたはundefinedすべてがあるかどうかを確認しようとすると、コード

  • 未定義のヌルを壊す何

    が崩壊してしまいます。または、nullまたはundefinedで、文字列かどうかを確認したい場合は、それが分解されます。

    私は、nullまたはundefinedを通す方法があるのでしょうか?それが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'が行うプリミティブで破壊されませんまともではない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'))

    関連する問題