2016-05-31 12 views
0

私はvariable.myMethod()を持つことができ、trueまたはfalseを返すことができる新しいグローバルメソッドを作成する方法はありますか?基本的には、変数が未定義であるかどうかをチェックし、typeof(variable) == 'undefined'を使用するか関数を指定するのではなく、variable.isUndefined()のようにすることができますか?trueかfalseを返しますか?Javascriptメソッドを追加

+2

未定義または宣言されていませんか?なぜ 'isUndefined(variable)'ではないのですか? – elclanrs

+1

'if(!variable){...}'?... – War10ck

+2

いいえ、これはできません。メソッドはオブジェクトのプロパティであり、変数ではありません。 – Barmar

答えて

1

私は先に進み、これを回答として投稿しますので、もう少し詳しく説明します。

私がコメントしたように、は非常にでなければなりません。ここで使用する用語について注意してください。宣言されていないと定義されていないため、非常に異なる2つのことを意味します。

変数が "未宣言"の場合、その変数は存在しないため、宣言されている場合は存在する可能性のあるメソッドを呼び出せません。

変数が "undefined"の場合は存在しますが、値は割り当てられていません。この場合、に存在する可能性のあるメソッドを呼び出そうとしますが、変数には値がないため失敗する可能性があります。

Object.prototype.myMethod = function() { 
    console.log("This is my method"); 
}; 

ので、理論的には、あなたがかどうかを確認する方法を作成することができます。

JavaScriptですべての種類は、次のようなので、あなたが、それらにメソッドを追加し、Objectタイプの子であります値が存在し、true/falseの値を返します。 StackOverflowのユーザーBarmarが指摘何

は同様に、 undefinednullは、このようにあなたの方法は存在しません、 Objectタイプの子ではありません。

他のコメントを述べてきたように、あなたはおそらくのようなものに固執する方がよいでしょうが、以下:ユーザーBarmarが指摘したように

if (!myVariable) { 
    // myVariable doesn't have a value 
} 

を私は、私の説明のほとんどは不要だったことを指摘したいと思い、 宣言されていないものと未定義のものとの間には実質的な違いはありませんです。

変数が宣言されていない場合、 "value"は基本的にundefinedと読み込まれ、メソッドは存在しません。

+0

この質問では、「宣言されていない」という用語は使用されていませんでした。答えのその部分は何を指していますか? – Barmar

+0

厳密なモードでない限り、宣言されていないと定義されていないの違いはあまり重要ではありません。変数に代入すると、その名前でグローバル変数が作成され、未割り当ての宣言された変数と同じように、その変数から読み込むと 'undefined'が返されます。 – Barmar

+0

@Barmar、あなたはもう一度正しいです。元の質問は「宣言されていない」とは決して言及されていませんでしたが、私はそれらの用語の間で異なっていることに気づく価値があると感じます。厳密なモードでなくても、存在しない変数のメソッドを呼び出そうとすると失敗するでしょうか? –

-1

これはパラドックスです。定義されていないオブジェクトは何も持っていないので、未定義のオブジェクトの中にメソッドを持つことはできません。それは明確なので、あなたもBを持っていけないので、動作しないことができるa.b.isDefined()を呼び出すようにしようと、

var a = {}; 

a.bがここに定義されていません。このオブジェクトを想像作ります。あなたがこのように定義されたbを必要とするようにします。

var a = {b:1,isUndefined:function(){return false}} 

したがって、オブジェクトを取るジェネリック関数を作る必要があります。これはトリックを行います

function isUndefined(obj,stringLink){ 
var arrayLink = stringLink.split("."); 
var current = obj[arrayLink[0]]; 
if(!current)return false; 
for(var i =1;i< arrayLink.length;i++){ 
    current = current[arrayLink[i]]; 
    if (!current)return false; 
    } 
return true; 
} 

ネストされたオブジェクトがターゲットに到達するまで多かれ少なかれチェックされます。 ありがとうございます

var a = {b:{c:{d:{e:{f:1}}}}} 
//this function will do a["b"]["c"]["d"]["e"]["f"] 
isUndefined(a,"a.b.c.d.e.f") //gives true 
//or you can use 
if(a&&a.b&&a.b.c&&a.b.c.d&&a.b.c.d.e&&a.b.c.d.e.f)//lots of work here 
+0

ここでは、falseの代わりにtrueを返し、trueの代わりにfalseを返します。またはjsutは関数の名前をisDefinedに変更します。 – Qaddura

関連する問題