たとえば、次のように配列を並べ替えることができます:
リーリーただし、次のようにオブジェクトのメソッドを呼び出すことはできません:
リーリーまた、文字列メソッドは直接呼び出すことができるのに、数値型とブール型は直接呼び出すことができないのはなぜですか。
文字列についてはある程度知っています。文字列メソッドを呼び出すと、一時的な String オブジェクトが生成されます。なぜ Number 型と Boolean 型が機能しないのでしょうか?
欧阳克2017-07-05 11:07:29
この不協和音eval()
解析'{}'
道理一样,js解析代码会优先把{
看成和function{}
的大括号一样,会分开解析先解析{
(开始),在解析}
(结束)。这样的话当然会报错了。
而eval()
解析'{}'
时是怎么办的,加个括号'({})'
;这样就会把{}
は全体として分析され、オブジェクトになります。
「文字列はメソッドを直接呼び出せるのに、数値型とブール型は呼び出せない理由」については、
ブール型は可能ですが、
数値に関しては、メソッドを直接呼び出すことができません。これは、
それでは、js には実際の整数が存在しないため、整数はすべて浮動小数点数で表されるため、js が解析すると 8
是发现后面还有.
于是会把8.
看成一个数,这样的话没加.
的toString
もちろん、それは間違っています。
だからこう書いても大丈夫
学习ing2017-07-05 11:07:29
まず第一に、あなたの考えは間違っています通常のオブジェクトオブジェクトはメソッドを呼び出すことができます。 リーリー
しかし、{}.toString()
の {}
は に読み込まれるため、{}.toString()
には構文エラーがあります。 {}.toString()
却是出现语法错误,因为{}.toString()
中的{}
将会被看成一个语句块,而不是对象直接量.
因为 JavaScript 将从左到右解析{}.toString()
,当遇到{
时,它将会看做一个语句块的开始,之后遇到}
,语句块结束,在遇到.
オブジェクト リテラル
を使用します。
JavaScript は {}.toString()
を左から右に解析するため、{
に遭遇すると、次のようになります。 }
に遭遇した後、ステートメント ブロックは終了します。.
に遭遇すると、構文エラーが発生します。
そして ({}).toString()
将可以正常工作.(注意包围在{}
两边的括号).
因为当解析({}).toString()
时,首先遇到(
({}).toString()
を使用すると、正常に動作します ({}
を囲む括弧に注意してください)。
解析するとき。 ({}).toString()
の場合、最初に (
が出現します。その後、 は括弧内の部分を式 として扱い、 は空のオブジェクト
高洛峰2017-07-05 11:07:29
{}.toString()
については、すでに誰かが明確に述べています。これは、JS エンジンが解析時に {} をブロック マークとして扱うためです。しかし、これは非常に奇妙なことだと感じており、Mac でいくつかのブラウザを試してみましたが、投稿者が指摘した問題は問題ありませんでした。
私が付け加えたいのは、投稿者の 2 番目の質問です。为什么字符串可以直接调用方法,Number类型、Boolean类型却不行。
どこかで間違っていると思います。
ここで、num は数値リテラル、flag はブール値です。どちらもメソッドを呼び出すことができます。作成者が文字列についてある程度の知識がある場合は、基本的なデータ型には属性やメソッドがなく、オブジェクトのみに属性やメソッドがあることを理解する必要があります。
しかし、なぜオブジェクトのメソッドを呼び出すのと同じように、基本的なデータ型のメソッドを呼び出すことができるのでしょうか? (例: 'a bc'.trim())
これは、基本データ型の値に対してメソッドが呼び出されるときに、js がそれを一時的なラッパー オブジェクトに変換するためです。文字列リテラルは文字列オブジェクト (new String('abc')) のようなプロパティとメソッドを呼び出すことができ、数値リテラルは数値オブジェクトのようなプロパティとメソッドを呼び出すことができます。
もちろん、この一時的なパッケージング オブジェクトは、コードが実行された時点でのみ存在します。メソッドが実行されると、一時オブジェクトはすぐに破棄されます。
つまり、投稿者が言ったことは、数値型とブール型の値でメソッドを呼び出すことは不可能であるということです。