zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

js中 [ ]+{ } と { }+[ ] の違い

1668517551012

[ ]+{ }:配列とオブジェクトの加算。

加算は暗黙の型変換を行い、そのルールは valueOf () または toString () を呼び出して非オブジェクトの値(プリミティブ値)を取得することです。

もし二つの値のいずれかが文字列であれば、文字列の連結が行われ、それ以外の場合は数値の加算が行われます。[] と {} の valueOf () はどちらもオブジェクト自身を返すため、toString () が呼び出され、最終的な結果は文字列の連結になります。

[].toString () は空の文字列を返し、({ }).toString () は "[object Object]" を返すため、最終的な結果は "[object Object]" になります。

{ }+[ ]:見た目は上記と同じであるべきです。

しかし、{} はオブジェクトを表すだけでなく、空のブロックも表すことができます。[] + { } の場合、[ ] は配列として解析されるため、後続の + は加算演算子として解析され、{ } はオブジェクトとして解析されます。

しかし、{} + [] の場合、{ } は空のブロックとして解析され、後続の + は正号演算子として解析されます。つまり、実際には:{∥empty block}+[ ] となり、空の配列に対して正号演算が実行され、実際には配列が数値に変換されます。まず.valueOf () を呼び出し、配列自身を返しますが、これはプリミティブ値ではないため、[ ].toString () を続けて呼び出し、空の文字列を返します。空の文字列は数値に変換され、0 を返し、最終的な結果となります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。