Javascriptタイプシステムのundefinedとnullの浅い分析
2935 ワード
前の話
一般的なプログラム言語ではnullだけが空を表していますが、javascriptの設計者Brendan Eichがundefinedを設計したのは、プログラムの複雑さを増したに違いありませんが、このようにするのも一定の原因があります.javascriptのundefinedとnullについて詳しく説明します.
歴史的要因
1995年にJavaScriptが誕生したとき、最初はJavaのようにnullだけが「なし」を表す値として設定されていました.C言語の伝統に基づいてnullは自動的に0に変換できるように設計されている.
しかし、JavaScriptのデザイナーBrendan Eichは、まだ足りないと思っている理由が2つあります.まずnullはJavaのようにオブジェクトとして扱われる.ただし、JavaScriptの値は元のタイプとオブジェクトタイプの2つに大別されており、Brendan Eichは「なし」を表す値はオブジェクトではない方がよいと考えています.次に、JavaScriptの最初のバージョンにはエラー処理メカニズムが含まれておらず、データ型の不一致が発生した場合、自動変換タイプや黙々と失敗することが多い.Brendan Eich氏はnullが自動的に0に変わると、エラーを発見しにくいと考えている.
そこでBrendan Eichはundefinedを設計した.nullは「なし」を表すオブジェクトで、数値に変換すると0になります.undefinedは「なし」を表す元の値で、数値に変換するとNaN
しかし、現在nullとundefinedは基本的に同義であり、いずれも元のタイプであり、わずかな違いしかない.
undefined
Undefindタイプには1つの値しかありません.undefinedです.宣言された変数が初期化されていない場合、変数のデフォルト値はundefinedです.したがって一般にundefinedは変数が初期化されていないことを示す
宣言されていない変数では1つの操作しか実行できません.typeofオペレータを使用してデータ型を検出しますが、厳密なモードではエラーが発生します.
typeof(test);//undefined
【出現シーン】
【1】未付与変数が宣言されている
【2】取得対象が存在しない属性
【3】戻り値のない関数の実行結果
【4】関数のパラメータが入力されていない
【5】void(expression)
【タイプ変換】
null
Nullタイプにはnullという値が1つしかありません.nullはjavascript言語のキーワードで、特殊な値を表し、「空の値」を記述するのによく使われます.
論理的に見るとnull値は空のオブジェクトポインタを表します
[注意]nullは空のオブジェクトポインタであり、[]は空の配列であり、{}は空のオブジェクトであり、3つは異なる
nullとundefinedは異なりますが、いずれも「値の空き」を表し、nullは「空の値」を表し、undefinedは「未定義」を表します.両者は往々にして交換できる.判定等しい演算子==両者が等しいと考える
実際、undefinedとnullはコンストラクタタイプではないため、プロパティとメソッドは一切ありません.と[]を使用してこの2つの値にアクセスするメンバーまたはメソッドでは、タイプエラーが発生します.
【タイプ変換】
javascriptでnullとundefinedの違いをご紹介します
undefinedは変数宣言が初期化されていない場合の値を表し、nullはオブジェクトを保存する準備ができていることを示し、オブジェクトを本当に保存していない値を表します.論理的にnull値は空のオブジェクトポインタを表します.
JavaScript(ECMAScript規格)には、Undefined、Null、Boolean、Number、String、複雑なタイプObjectの5つの基本タイプがあります.nullとundefinedは異なるタイプに属し、初期化定義されていない値はtypeofで「undefined」(文字列)であり、null値はtypeofで「object」(文字列)であることがわかります.
変数をundefinedとして明示的に設定することは推奨されませんが、オブジェクトを保存する変数がまだオブジェクトを保存していない場合はnullに設定する必要があります.実際、undefined値はnull値から派生しており、ECMAScript規格では両者に対して等性テストを行うにはtrue、すなわち
一般的なプログラム言語ではnullだけが空を表していますが、javascriptの設計者Brendan Eichがundefinedを設計したのは、プログラムの複雑さを増したに違いありませんが、このようにするのも一定の原因があります.javascriptのundefinedとnullについて詳しく説明します.
歴史的要因
1995年にJavaScriptが誕生したとき、最初はJavaのようにnullだけが「なし」を表す値として設定されていました.C言語の伝統に基づいてnullは自動的に0に変換できるように設計されている.
しかし、JavaScriptのデザイナーBrendan Eichは、まだ足りないと思っている理由が2つあります.まずnullはJavaのようにオブジェクトとして扱われる.ただし、JavaScriptの値は元のタイプとオブジェクトタイプの2つに大別されており、Brendan Eichは「なし」を表す値はオブジェクトではない方がよいと考えています.次に、JavaScriptの最初のバージョンにはエラー処理メカニズムが含まれておらず、データ型の不一致が発生した場合、自動変換タイプや黙々と失敗することが多い.Brendan Eich氏はnullが自動的に0に変わると、エラーを発見しにくいと考えている.
そこでBrendan Eichはundefinedを設計した.nullは「なし」を表すオブジェクトで、数値に変換すると0になります.undefinedは「なし」を表す元の値で、数値に変換するとNaN
しかし、現在nullとundefinedは基本的に同義であり、いずれも元のタイプであり、わずかな違いしかない.
undefined
Undefindタイプには1つの値しかありません.undefinedです.宣言された変数が初期化されていない場合、変数のデフォルト値はundefinedです.したがって一般にundefinedは変数が初期化されていないことを示す
var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined
宣言されていない変数では1つの操作しか実行できません.typeofオペレータを使用してデータ型を検出しますが、厳密なモードではエラーが発生します.
typeof(test);//undefined
【出現シーン】
【1】未付与変数が宣言されている
【2】取得対象が存在しない属性
【3】戻り値のない関数の実行結果
【4】関数のパラメータが入力されていない
【5】void(expression)
var i;
console.log(i);//undefined
var o = {};
console.log(o.p);//undefined
function f(){};
console.log(f());//undefined
function f(x){return x;}
console.log(f());//undefined
console.log(void(0));//undefined
【タイプ変換】
Boolean(undefined): false
Number(undefined): NaN
String(undefined): 'undefined'
null
Nullタイプにはnullという値が1つしかありません.nullはjavascript言語のキーワードで、特殊な値を表し、「空の値」を記述するのによく使われます.
論理的に見るとnull値は空のオブジェクトポインタを表します
[注意]nullは空のオブジェクトポインタであり、[]は空の配列であり、{}は空のオブジェクトであり、3つは異なる
console.log(typeof null);//'object'
nullとundefinedは異なりますが、いずれも「値の空き」を表し、nullは「空の値」を表し、undefinedは「未定義」を表します.両者は往々にして交換できる.判定等しい演算子==両者が等しいと考える
console.log(null == undefined);//true
実際、undefinedとnullはコンストラクタタイプではないため、プロパティとメソッドは一切ありません.と[]を使用してこの2つの値にアクセスするメンバーまたはメソッドでは、タイプエラーが発生します.
【タイプ変換】
Boolean(null): false
Number(null): 0
String(null): 'null'
javascriptでnullとundefinedの違いをご紹介します
undefinedは変数宣言が初期化されていない場合の値を表し、nullはオブジェクトを保存する準備ができていることを示し、オブジェクトを本当に保存していない値を表します.論理的にnull値は空のオブジェクトポインタを表します.
JavaScript(ECMAScript規格)には、Undefined、Null、Boolean、Number、String、複雑なタイプObjectの5つの基本タイプがあります.nullとundefinedは異なるタイプに属し、初期化定義されていない値はtypeofで「undefined」(文字列)であり、null値はtypeofで「object」(文字列)であることがわかります.
変数をundefinedとして明示的に設定することは推奨されませんが、オブジェクトを保存する変数がまだオブジェクトを保存していない場合はnullに設定する必要があります.実際、undefined値はnull値から派生しており、ECMAScript規格では両者に対して等性テストを行うにはtrue、すなわち
alert(null==undefined); // true