それで、私は最近、JavascriptとWinRTで顔をしかめる瞬間がありました。基本的に、私はWinRT APIを開発しているので、Javascript、C ++、およびC#でうまく機能するはずです。渡された値がnullの場合に特別な処理を行うAPIのプロパティがあります。したがって、たとえば:
public string Foo
{
get
{
return foobar.ToString();
}
set
{
if(string.IsNullOrEmpty(value))
{
foobar=SomeSpecialValue;
return;
}
ParseIntoFoobar(value);
}
}
これは私には完全に素晴らしいプロパティのように思えます。ただし、Javascriptから次のようなものを使用する場合:
myFoobar.foo=null;
ParseIntoFoobar
結果は、 Why?からスローされた解析例外です。どうやらJavascriptのnullの値は、null`という単語を含む文字列"null"
の値と同じだからです。
私が見たドキュメントから、これはC#のnullに変換されるか、この間抜けな結果ではなく、空の文字列になるはずです。実際、私には意味のない、本当に直感的でない振る舞いをすることができます。投影:
public string Biz{get;set;}
Javascript:
myObject.biz=null;
log(myObject.biz==null); //results in false
この「機能」を回避するための最良の方法は何ですか?nullを検出したいが、文字列が完全に無効ではない場合はどうすればよい"null"
ですか?(ユーザー名などを考えてください)