[解決済み] String(value) と value.toString() の違いは何ですか?
2022-05-31 17:27:04
質問
Javascriptには、型や型変換に関するたくさんのトリックがあります。この2つの方法は同じなのでしょうか、それとも何か異なる点があるのでしょうか?
どのように解決するのですか?
完全に同じというわけではなく、実は
として呼び出されるStringコンストラクタは、関数として呼び出される
(あなたの最初の例) は、最後に
toString
メソッドを呼び出します。
var o = { toString: function () { return "foo"; } };
String(o); // "foo"
一方、ある識別子が
null
または
undefined
を使用することはできません。
toString
メソッドを使うと
TypeError
例外
:
var value = null;
String(null); // "null"
value.toString(); // TypeError
は
String
のコンストラクタを関数として呼び出すと、おおよそ次のようになります。
value + '';
からの型変換ルールは
オブジェクト
-から
プリミティブ
は、仕様書に詳しく書かれている
[[DefaultValue]]
の内部動作に記載されています。
簡単にまとめますと オブジェクト -から 文字列 に変換する場合、以下の手順で行います。
-
利用可能であれば
toString
メソッドを実行します。-
もし
result
が プリミティブ を返します。result
を返すか、さもなければステップ2へ。
-
もし
-
利用可能であれば
valueOf
メソッドを実行します。-
もし
result
が プリミティブ を返します。result
を返すか、さもなければステップ3へ。
-
もし
-
投げる
TypeError
.
上記のルールが与えられれば、関係するセマンティクスの例を作ることができます。
var o = {
toString: function () { return "foo"; },
valueOf: function () { return "bar"; }
};
String(o); // "foo"
// Make the toString method unavailable:
o.toString = null;
String(o); // "bar"
// Also make the valueOf method unavailable:
o.valueOf = null;
try {
String(o);
} catch (e) {
alert(e); // TypeError
}
このメカニズムについてもっと知りたい場合は
ToPrimitive
と
ToString
の内部操作。
こちらの記事もおすすめです。
関連
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】event.stopPropagationとevent.preventDefaultの違いは何ですか?
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
JavaScriptのクロージャの説明
-
vue ディレクティブ v-html と v-text
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
JavaScriptのgetElementById()メソッド入門