25.オブジェクトの元のタイプ
12097 ワード
オブジェクトタイプは元のタイプに変換できます.
たとえば、オブジェクト間でプラスまたはマイナスを行います.
この場合、自動変換が発生します.
オブジェクトは元の値に変換され、演算が実行されます.オブジェクトのブールタイプは無条件trueです. したがって,オブジェクトを文字と数字の形に変換することが想像できる. に変換された数値形式は、オブジェクト間で数学的相関演算または関数が記録されたときに発生します. 字型への変換は、
オブジェクト型変換は
所望の文字列の演算を実行する場合は
数学演算を適用する場合は
資料型が不確定な場合は
文字列のプラス記号であっても、数値のプラス記号であってもよい.
したがって、オブジェクト間を加算すると
また、等しい演算子
JavaScriptには、
この構成部品は、ターゲットの名前を付けるデータ型(hint)に使用されます.
素子が生成される前に、
オブジェクト上のSymbol.TOPrimitiveがない場合は、次のルールに従って呼び出します. hint"string":toString->valueOfシーケンス その他:valueOf->toStringシーケンス これらのメソッドは元の値を返さなければなりません.オブジェクトを返すと、結果は無視されます.方法が効かないように・・・
一般オブジェクトは次の規則に従います. toStringは、「[objectObject]」 を返します. valueOfは、オブジェクト自体 を返す.
演算子が
オブジェクトが被演算子の場合、次の手順に従います.
1.オブジェクトがオリジナルになります.
2.変換後、元の値が必要な形状でない場合は、再び明示的な変換となります. obj*2でobjはオリジナルに変換され、toStringで 「2」*2は、文字に数字を乗じた望ましくない形式である.
だから「2」をさらに数字型に変えて2*2にしました.
たとえば、オブジェクト間でプラスまたはマイナスを行います.
alert
でオブジェクトをパラメータとして配置します.この場合、自動変換が発生します.
オブジェクトは元の値に変換され、演算が実行されます.
alert
のパラメータに変換されたように、出力対象時に発生する.オリジナル
オブジェクト型変換は
hint
を基準として3種類に分類される.hint
は「目標に基づいた資料型」と理解できる."string"
所望の文字列の演算を実行する場合は
hint = string
である.alert(obj); // 객체를 출력
defObj[obj] = 123; // 객체를 프로퍼티 키로 사용
"number"
数学演算を適用する場合は
hint = number
です.let num = Number(obj); // 숫자형으로 명시적 형 변환
let n = +obj; // 단항 덧셈 연산으로 자동 형 변환
let difDate = date1 - date2; // 객체의 뺄셈
let samll = user1 < user2; // 비교 연산
"default"
資料型が不確定な場合は
hint = default
である.+
演算子を使用してこの加算を行うと、文字列のプラス記号であっても、数値のプラス記号であってもよい.
したがって、オブジェクト間を加算すると
default
となる.また、等しい演算子
==
を使用すると、オブジェクトをなぜデータ型に変換するのか分からないため、defult
となる.let total = obj1 + obj2; // default
let (user === 1); // default
Symbol.toPrimitive
JavaScriptには、
Symbol.toPrimitive
という内蔵要素が含まれています.この構成部品は、ターゲットの名前を付けるデータ型(hint)に使用されます.
obj[Symbol.toPrimitive] = function(hint) {
// 원시값을 반환
// hint는 "string", "number", "default"중 하나
};
以下に、オブジェクト-元の変換方法の一例を実施するlet user = {
name: "quakka",
money: 1000,
[Symbol.toPrimitive](hint) {
alert(`hint: ${hint}`);
return hint == "string" ? `{name: "${this.name}"}` : this.money;
}
};
// testCase
alert(user); // hint: string -> {name: "jogn"}
alert(+user); // hint: number -> 1000
alert(user + 500); // hint: default -> 1500
toStringとvalueOf
素子が生成される前に、
toString
およびvalueOf
を直接使用して変形した.オブジェクト上のSymbol.TOPrimitiveがない場合は、次のルールに従って呼び出します.
一般オブジェクトは次の規則に従います.
let user = {
name: 'Quakka'
};
alert(user); // [object Object]
alert(user.valueOf() === user); //true
上記の概念を用いて同様に実施する例では、let user = {
name: "Quakka",
money: 50000,
toString() {
return `{name: "${this.name}"}`;
},
valueOf() {
return this.money;
}
};
alert(user); // toString -> {name: "John"}
alert(+user); // valueOf -> 50000
alert(user + 500); // valueOf -> 50500
Symbol.TOPrimitiveとvalueOfがない場合、toStringはすべてのタイプ変換を処理します.追加フォーマットのコピー
演算子が
*
である場合、演算子は숫자형
に変換される.オブジェクトが被演算子の場合、次の手順に従います.
1.オブジェクトがオリジナルになります.
2.変換後、元の値が必要な形状でない場合は、再び明示的な変換となります.
let obj = {
toString() {
return "19";
}
};
console.log(obj * 2); // 4
"2"
に戻ります.だから「2」をさらに数字型に変えて2*2にしました.
*
ではなく+
であれば、「22」は結果値である.Reference
この問題について(25.オブジェクトの元のタイプ), 我々は、より多くの情報をここで見つけました https://velog.io/@wldns12378/25.-객체의-원시형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol