[解決済み】変数をundefinedに設定したり、引数にundefinedを渡すことはできますか?
質問
JavaScriptの
undefined
と
null
の値を指定します。
とは何ですか?
if (!testvar)
は実際に何をするのでしょうか?それは
undefined
と
null
または単に
undefined
?
一度定義した変数を、再びクリアして
undefined
(したがって、その変数を削除する)?
を渡すことはできますか?
undefined
をパラメータとして使用できますか?例
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
解決方法は?
<ブロッククオートJavascriptのundefined & nullについて少し混乱しています。
null
は、他のスクリプト言語の帯域外の 'null', 'nil', 'None' オブジェクトの概念と似たような動作をします。
undefined
一方、JavaScriptは奇妙な癖があります。これは帯域外値を表すシングルトンオブジェクトで、本質的には2つ目の似て非なるものである。
null
. 出てくるんですよ。
-
の引数リストより少ない引数で関数を呼び出した場合、その関数の実行はできません。
function
文のリストで、パスされていない引数はundefined
. このテストは、例えば...で行うことができます。function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... }
この方式では
dosomething(1)
とdosomething(1, undefined)
;arg2
はどちらも同じ値になります。もし、違いを見分ける必要がある場合はarguments.length
しかし、このようなオプションの引数は、一般的にあまり読みやすいものではありません。 -
関数が
return value;
を返します。undefined
. 一般に、このような戻り結果を使用する必要はありません。 -
を持たせて変数を宣言した場合
var a
ステートメントをブロック内で使用し、まだ値を代入していない場合、それはundefined
. 繰り返しになりますが、これに頼る必要はないでしょう。 -
不気味な
typeof
演算子が返す'undefined'
オペランドが存在しない単純な変数である場合、それを参照しようとすると通常起こるようなエラーを投げるのではなく、その変数を参照します。(括弧でくくられた単純な変数を指定することもできますが、その場合は ではなく は、存在しない変数を含む完全な式です)。これもあまり意味がない。 -
これは賛否両論ありますね。存在しないオブジェクトのプロパティにアクセスしても、他の言語のようにすぐにエラーになることはない。その代わりに
undefined
オブジェクトを作成します。(そしてそのundefined
オブジェクトは、スクリプトの後のほうで、JavaScriptがただエラーをすぐに投げるよりも、追跡するのがずっと難しい奇妙な方法で失敗します)。これは、プロパティの存在を確認するためによく使われます。
if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something...
しかし
undefined
を他の値と同様に使用することができます。o.prop= undefined;
というのは、プロパティがそこにあるかどうかを実際には確実に検出できないからです。それよりも
in
演算子は、オリジナルのNetscape版JavaScriptにはなかったのですが、今ではどこでも使えるようになっています。if ('prop' in o) ...
まとめると
undefined
はJavaScript特有の混乱で、みんなを混乱させています。オプションの関数引数は別として、JSには他にもっとエレガントなメカニズムがないのです。
undefined
は避けるべきでしょう。この言語には決して含まれるべきではなかったのです。
null
は、(2)と(3)はうまくいったでしょうし、(4)は、当初JavaScriptには例外がなかったからこそ存在する誤機能です。
とは
if (!testvar)
は実際に何をするのでしょうか?未定義やNULLをテストするのでしょうか、それとも未定義だけなのでしょうか?
このような「真実性」テストは、次のようなものをチェックします。
false
,
undefined
,
null
,
0
,
NaN
と空文字列があります。しかし、この場合、そう、本当に
undefined
が関係する。IMOは、そのことをもっと明確にし、次のように言うべきでしょう。
if (testvar!==undefined)
.
一旦定義した変数を未定義に戻す(つまり変数を削除する)ことはできますか?
を確実に割り当てることができます。
undefined
を追加しても、その変数が削除されることはありません。ただ
delete object.property
演算子で本当に削除してしまいます。
delete
は、変数というよりむしろプロパティに使うものです。ブラウザは、ストレートな
delete variable
しかし、これは良いアイデアではなく、ECMAScript 第 5 版のストリクトモードでは動作しません。もし何かへの参照を解放してガベージコレクトできるようにしたいのであれば、より一般的なのは
variable= null
.
パラメータとしてundefinedを渡すことはできますか?
はい。
関連
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] JavaScriptプログラマーが知っておくべきこととは?[クローズド]