JSでデータ型を変換するにはどうすればよいですか?
型変換は暗黙的変換と明示的変換の2 種類に分けられます。
ドミナントスイッチ
大きく分けて数値型、文字列型、ブール型の3つに分類されます。
3種類のプリミティブ型の値の変換規則を一つ一つ列挙することはしません
数値型(参照型変換)
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
第一步,调用对象自身的`valueOf`方法。如果返回原始类型的值,则直接对该值使用`Number`函数,不再进行后续步骤。
第二步,如果`valueOf`方法返回的还是对象,则改为调用对象自身的`toString`方法。如果`toString`方法返回原始类型的值,
则对该值使用`Number`函数,不再进行后续步骤。
第三步,如果`toString`方法返回的是对象,就报错。
补充一点:`valueOf`和`toString`方法,都是可以自定义的
复制代码
文字列型(参照型変換)
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
`String`方法背后的转换规则,与`Number`方法基本相同,只是互换了`valueOf`方法和`toString`方法的执行顺序。
复制代码
暗黙的な変換
タイプ | 変換前 | 変換後 |
---|---|---|
番号 | 4 | 4 |
弦 | 「1」 | 1 |
弦 | 「」 | 0 |
ブール値 | 真実 | 1 |
ブール値 | 間違い | 0 |
未定義 | 未定義 | NaN |
ヌル | ヌル | 0 |
閉鎖
クロージャは、別の関数のスコープ内の変数にアクセスできる関数です———— 「JavaScript 高度なプログラミング」
-
クロージャーの使用:
- 関数が定義された字句スコープにアクセスする機能 (関数のリサイクルを防止)
- プライベート変数
- ブロックレベルのスコープをシミュレートする
- モジュールを作成する
-
クロージャの欠点: クロージャは関数の変数を呼び出し、関数の実行後にこの変数を解放できないため、関数の変数はメモリ内に保持されます。クロージャが多すぎるとメモリ リークが発生する可能性があります。
-
解決策: 変数を null に設定します。
プロトタイプとプロトタイプ チェーン
プロトタイプ
- 各オブジェクトには、独自のプロトタイプ オブジェクトを指すprotoプロパティがあります。
- 各コンストラクターには、 インスタンス オブジェクトのプロトタイプ オブジェクトを指すプロトタイププロパティがあります。
- プロトタイプ オブジェクトの コンストラクターは コンストラクター自体を指します
プロトタイプチェーン
オブジェクトのプロパティにアクセスしようとすると、オブジェクトだけでなく、オブジェクトのプロトタイプ、オブジェクトのプロトタイプのプロトタイプなども検索され、一致する名前のプロパティが見つかるか、プロトタイプに到達するまで検索が繰り返されます。チェーンの終端がヌル