JavaScriptを深く理解する
7905 ワード
jsは万物が対象かどうか:
国内の各大網駅のブログでよく見られますが、JSの万物の対象というのは本当ですか?
じゃ、まず私達がJSの中のデータのタイプをしごきにきます.JSの中のデータのタイプは次の種類があります.
Unidefined Null ボロアNumber String Symbol(ES 6に追加)Object だから本質的には本当にObjectですか?NO.
1.データタイプ
JSでは前の6種類を基本データタイプと呼びます.最後は複雑なデータタイプ、つまり対象タイプです.ここから見ると、対象と他のものが区別されているようです.
2.対象の種類と他のタイプの違い
オブジェクトは属性と方法を動的に追加できますが、基本タイプはだめです.以下のとおりです
さらに、JSのデータタイプは、値タイプ(基本タイプ)と参照タイプ(対象タイプ)との区別があり(他の多くの言語でもこのような違いがあります)、いわゆる値タイプと参照タイプは、インスタンスオブジェクトに値が保存されているだけでなく、対象の参照が保存されています.値タイプ:1つの値タイプのインスタンスを初期化すると、実際にはこの値にメモリ空間を割り当てて保存します.値付け操作を行うと、新しいインスタンスは新しいメモリ空間を開いて、元の値 参照タイプ:参照タイプの一例を初期化すると、この例の値があるメモリ空間の参照だけがこの例に割り当てられ、 当面の結論
実は上から見れば、JSの中では万物の対象ではないことが明らかですが、なぜこんなに多くの人がこの観点が正しいと信じていますか?(最初は無知だった私を含めて)
なぜですか
1.typeof null
これはJSの
2.基本的なデータタイプのインスタンスオブジェクトがあります.
もっと分かりやすいのを見に来ましょう.
OK、宗上所得:基本タイプも対象タイプです.つまり万物は対象です.
ほとんどの人がこの結論を出すことができるのはこれに基づいていると思います.しかし、彼らは無視しました.JSの世界には包装対象というタイプがあります.
包装対象(String,Number,Boolean)
えっと、 Stringを作成する例 は、例示的に指定された方法を呼び出す .はこの実例を廃棄します.
転載元:https://segmentfault.com/a/1190000012037062
国内の各大網駅のブログでよく見られますが、JSの万物の対象というのは本当ですか?
じゃ、まず私達がJSの中のデータのタイプをしごきにきます.JSの中のデータのタイプは次の種類があります.
Unidefined Null ボロアNumber String Symbol(ES 6に追加)Object だから本質的には本当にObjectですか?NO.
1.データタイプ
JSでは前の6種類を基本データタイプと呼びます.最後は複雑なデータタイプ、つまり対象タイプです.ここから見ると、対象と他のものが区別されているようです.
2.対象の種類と他のタイプの違い
オブジェクトは属性と方法を動的に追加できますが、基本タイプはだめです.以下のとおりです
// Number
var num1 = 1000;
num1.length = 10;
console.log(num1.length); //undefinded
// Array
var arr1 = [];
arr1.length = 10;
console.log(arr1.length); //10
3.値の種類と参照の種類さらに、JSのデータタイプは、値タイプ(基本タイプ)と参照タイプ(対象タイプ)との区別があり(他の多くの言語でもこのような違いがあります)、いわゆる値タイプと参照タイプは、インスタンスオブジェクトに値が保存されているだけでなく、対象の参照が保存されています.
copy
を返します. この新しいメモリ空間に入りました.copy
新しいインスタンスオブジェクトを与えたが、実際にはcopy
です. このメモリ空間に対する参照を行い、二つのインスタンスオブジェクトは本質的にメモリ空間を共有する.実は上から見れば、JSの中では万物の対象ではないことが明らかですが、なぜこんなに多くの人がこの観点が正しいと信じていますか?(最初は無知だった私を含めて)
なぜですか
1.typeof null
console.log(typeof null); // object
多くの人が(多くないかもしれないが、私は当てずっぽう)言っています.null
までです. 全部対象のタイプです.他は対象ではないですか?私も前は戸惑っていました.本を読む時までnull
を見ます. 空のオブジェクトの参照にすぎません.このタイプはobject
です. そんなにおかしくないです.これはJSの
bug
という人もいます. ,異なるオブジェクトは下の層ではバイナリとして表示されます. JavaScript
中二進数の前三桁は全部0と判断されます. object
タイプ,null
のバイナリ表示は全0で、自然上位3桁も0ですので、実行します. typeof
"object"
に戻ります. .本当であろうと、うそであろうと.これはbug
です. 必要はないです.下の階はどうやって実現されるかは分かりませんが、null
だけです. 下の階は全部0です.object
に戻ります. ,このbug
あまりにも下品すぎます.JSの設計者はnull
を信じたいです. 空のオブジェクト参照として表示2.基本的なデータタイプのインスタンスオブジェクトがあります.
__proto__
以下の通りですvar str = "oujm";
console.log(str.__proto__);
/* String {
anchor:ƒ anchor()
at: ƒ at()
big: ƒ big()
blink: ƒ blink()
bold: ƒ bold()
charAt: ƒ charAt()
charCodeAt: ƒ charCodeAt()
codePointAt: ƒ codePointAt()
concat: ƒ concat()
constructor: ƒ String()
...
} */
// Boolean Number
私たちの前の勉強からstr
が分かります. 基本タイプですが、基本タイプはどうして属性がありますか?しかし、ここでは、この基本タイプの例示的なオブジェクトには、属性__proto__
があるだけでなく、その構造関数がString()
であることが明らかになっている. ,この時、属性がある以上、構造関数があると感じる人がいます. 本質的には対象です.これは表面的には大丈夫そうです.もっと分かりやすいのを見に来ましょう.
var str1 = "oujm";
var str2 = str1.substring(2);
上からはstr
が見えます. 方法がありますOK、宗上所得:基本タイプも対象タイプです.つまり万物は対象です.
ほとんどの人がこの結論を出すことができるのはこれに基づいていると思います.しかし、彼らは無視しました.JSの世界には包装対象というタイプがあります.
包装対象(String,Number,Boolean)
えっと、
str1
, String
, Number
,この三つは基本タイプではないですか?実際には、ECMAScriptは、この3つの特殊な引用タイプ(すなわち、String、Number、Boolean)を提供しています.この3つの引用タイプは他の参照タイプと似ていますが、それぞれの基本タイプに応じた特殊な行動を持っています.実際には、本タイプを読むたびに、バックグラウンドは対応する基本パッケージタイプのオブジェクトを作成します.Boolean
明らかに1つの基本的なタイプの実例で、問題は str1
文字列に方法がありますか?実際には、基本的なタイプのオブジェクトをよりよく動作させるために、バックグラウンドで一連の動作が行われています.// var str2 = str1.substring(2) :
var tempStr = new String("oujm");
var str2 = tempStr.substring(2);
tempStr = null;
ここから見ると、一般的な引用タイプと包装タイプの唯一の違いは対象のライフサイクルにある.包装タイプの対象ライフサイクルは短く、コードだけが実行された瞬間に破壊されてしまうので、これはつまり運行時には基本タイプの値に属性と方法を加えることができないのです.var str1 = "oujm";
var str1.bf = "ethan";
console.log(str1.bf); // undefined
これも私のかつての疑問に答えました.var str1 = "oujm";
var str2 = new String("ethan");
console.log(str1.__proto__ === str2.__proto__); // true
console.log(str1 instanceof String); // false
console.log(str2 instanceof String); // true
同じ理由で、str1.substring(2)
を呼び出します. 属性の瞬間も、__proto__
を使用します. まず対象を具体化します.その瞬間の彼らの構造関数と原型のオブジェクトは同じですが、その瞬間だけです.転載元:https://segmentfault.com/a/1190000012037062