1. ホーム
  2. javascript

[解決済み] JavaScript の文字列連結における null または未定義の値に関する挙動

2023-07-04 01:43:47

質問

ご存知のように、JavaScriptでは '' + null = "null"'' + undefined = "undefined" (と表示されます(私がテストできるほとんどのブラウザ:Firefox、Chrome、IEで)。この奇妙な現象の原因 (Brendan Eich の頭の中は一体どうなっているのか!) と、ECMA の将来のバージョンでこれを変更する狙いがあるのかどうかを知りたいと思います。また、ECMA の将来のバージョンで変更する狙いがあるのかどうか知りたいです。 'sthg' + (var || '') のようなサードパーティフレームワークを使用しなければならないのはかなり不満です。 アンダースコア などのサードパーティフレームワークを使うのは、ゼリーの釘打ちにハンマーを使っているようなものです。

編集する。

StackOverflowが要求する基準を満たし、私の質問を明確にするために、それは3重のものである。

  • JS を変換する奇妙な現象の背景にはどのような歴史があるのでしょうか。 null または undefined の文字列を String を連結するのですか?
  • ECMAScript の将来のバージョンで、この動作が変更される可能性はありますか?
  • を連結する最もきれいな方法は何ですか? String と潜在的な null または undefined オブジェクトを、この問題に陥ることなく(いくつかの "undefined""null" を含む)ですか?主観的な基準で 一番きれい というのは、短い、きれい、効果的という意味です。というのは不要です。 '' + (obj ? obj : '') が本当にきれいでないことは言うまでもありません...

どのように解決するのですか?

<ブロッククオート

この問題に陥ることなく、NULLまたは未定義のオブジェクトを含む文字列を連結する最も美しい方法は何ですか[・・・]?

いくつかの方法がありますし、あなた自身もそれらに言及しています。手短に言うと だけ 関数です。

const Strings = {};
Strings.orEmpty = function( entity ) {
    return entity || "";
};

// usage
const message = "This is a " + Strings.orEmpty( test );

もちろん、実際の実装は自分のニーズに合わせて変更することができます(そうすべきです)。そしてこれがすでに、カプセル化を導入したこの方法が優れていると思う理由です。

本当に、カプセル化されていない場合、最も美しい方法は何かと尋ねればいいのです。この質問を自分にするのは すでに というのは、実装をこれ以上変更できないような状況になることが分かっているので、すぐに完璧なものにしたいと思うからです。しかし、これが問題なのです。要件、見解、そして環境さえも変化するのです。進化するんです。だから、1行と、おそらく1つか2つのテストを適応させるだけで、実装を変更できるようにしてはどうでしょうか。

実際のロジックをどのように実装すればよいのか、本当に答えていないので、これを不正行為と呼ぶこともできます。しかし、それが私の言いたいことです:それは重要ではありません。まあ、少しはそうかもしれません。しかし、本当に、変更するのは簡単なので、心配する必要はありません。また、インライン化されていないため、この方法で実装するか、より洗練された方法で実装するかどうかにかかわらず、見た目もずっと美しくなります。

もし、コード全体で || を繰り返している場合、2つの問題に直面します。

  • コードが重複する。
  • そして、コードを重複させるので、将来の保守や変更が難しくなります。

そしてこれらは、高品質のソフトウェア開発に関して、一般にアンチパターンとして知られている2つのポイントです。

一部の人は、これはオーバーヘッドが多すぎると言い、パフォーマンスについて話すでしょう。それは非理性的なものです。1 つには、これはほとんどオーバーヘッドを追加しません。もしこれが心配なら、あなたは間違った言語を選択しました。jQueryだって関数を使っている。マイクロ最適化を克服する必要があります。

もうひとつは、コードコンパイラ=ミニファイアを使うことです。この分野の優れたツールは、コンパイルの段階で、どのステートメントをインライン化するかを検出しようとします。この方法では、コードをクリーンかつ保守的に保つことができ、また、まだそれを信じている場合、あるいは本当にこれが重要な環境である場合は、パフォーマンスの最後の一滴を得ることができます。

最後に、ブラウザーに対する信頼があります。ブラウザはコードを最適化し、最近ではかなり良い仕事をしてくれます。