311

「Web 開発者のためのプロフェッショナルな Javascript」の第 4 章を読んでいると、プリミティブの 5 つのタイプが undefined、null、boolean、number、および string であることがわかります。

がプリミティブの場合null、なぜ がtypeof(null)返されるの"object"ですか?

それは参照によって渡されることを意味しませんかnull(ここではすべてのオブジェクトが参照によって渡されると想定しています)、したがってプリミティブではありませんか?

4

9 に答える 9

262

オペレーターの動作に関する MDN ページtypeofから:

null

// これは JavaScript の開始以来の意味です
typeof null === 'オブジェクト';

JavaScript の最初の実装では、JavaScript の値は type タグと値として表されていました。オブジェクトの型タグは 0nullでした。NULL ポインター (ほとんどのプラットフォームで 0x00) として表されました。その結果、 null は型タグとして 0 を持っていたため、「オブジェクト」のtypeof戻り値です。(参考

ECMAScript の修正が (オプトイン経由で) 提案されましたが、却下されました。という結果になったでしょうtypeof null === 'null'

于 2013-09-15T02:10:36.377 に答える
75

がプリミティブの場合null、なぜ がtypeof(null)返されるの"object"ですか?

スペックにそう書いてあるから。

11.4.3typeofオペレーター_

プロダクションUnaryExpression : typeof UnaryExpressionは次のように評価されます。

  1. UnaryExpressionを評価した結果をvalとします
  2. Type ( val ) がReferenceの場合、
       a. IsUnresolvableReference ( val ) がtrue の場合、" " を返します。    b. valをGetValue ( val )とします。undefined
  3. 表 20 に従って、 Type ( val ) によって決定される文字列を返します。

ここに画像の説明を入力

于 2013-09-15T02:07:25.923 に答える
5

がプリミティブの場合null、なぜtypeof(null)" " を返すのobjectですか?

要するに、これは ECMAScript のバグであり、型はnull

参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

于 2015-05-06T10:37:27.693 に答える