zishu's blog

zishu's blog

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

js中 [ ]+{ } 和 { }+[ ] 的区别

1668517551012

[ ]+{ }:一个配列にオブジェクトを追加します。

加法会进行隐式类型转换,规则是调用其 valueOf () 或 toString () 以取得一个非对象的值 (primitive value)。

如果两个值中的任何一个是字符串,则进行字符串串接,否则进行数字加法。[] 和 {} 的 valueOf () 都返回对象自身,所以都会调用 toString (),最后的结果是字符串串接。

[].toString () 返回空字符串,({ }).toString () 返回 "[object Object]",最后的结果就是 "[object Object]".

{ }+[ ]:上記と同じように見えます。

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

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

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