jsマジック「+」操作

ご存知のとおり、jsは弱い言語です。Javaとは異なり、変数を定義するときに変数の型を宣言する必要があります。通常、「+」演算を使用する場合は、数字を追加するか、文字列にスペルしますが、次のようないくつかの驚きもあり
ます。1。簡単なものから始めましょう。

 true+true

印刷されるのは2です。その理由は、実行時にjsがtrueを数値1に変換し、falseを0に変換するためです。

2.別の変態:

[3,4]+[5,6]=?

子供靴の原理が私に答えを教えてくれることを知っているなら:3,45,6、これはなぜですか?
理由は単純です。まず、jsのデータ型について説明しましょう。基本的な型は、undefined、null、number、string、boolean、および複雑なデータ型であるArrayとObjectです。「+」演算を実行すると、次のようになります
。A:数値加算の場合、通常の加算演算が実行されます
。B:加数の1つが数字以外の場合、文字列スプライシングのために文字列型に変換されます。 ;
C:複合型の場合、Arrayはstring()メソッドを使用して、配列を対応する文字列に変換します。空の配列の場合は「」になります。たとえば、空でない配列の場合は、[5,6]は「5.、6」に変換されます。オブジェクトの場合は、文字列メソッドを呼び出した後に「[objectObject]」を返します。
したがって[3,4] + [5,6] = '3,4' + '5,6' = 3,45、6
3.アップグレードされた異常:

{a:4}+[5,6]=?

上記の計算方法によれば、[オブジェクトオブジェクト] 5,6
{a:4} + [5,6] = '[オブジェクトオブジェクト]' + '5,6' = [オブジェクトオブジェクト]であるとすぐに結論付けることができます。 5、6
嫌な追加のグループで4見てみましょう:

[]+{}=?
{}+[]=?

印刷すると、最初のオブジェクトは「[オブジェクトオブジェクト]」であり、計算ロジックに沿っていますが、2番目のブラウザは「0」になります(一部のブラウザは通常「[オブジェクトオブジェクト]」です)。 。0の理由は何ですか?最初の{}が再度実行されると、ブラウザはそれをステートメント(宣言)として扱い、実際の実行は+ []であり、+ []の場合、数値([])を0に渡し
ます。5。2つが空の場合はどうなりますか。オブジェクトは一緒に追加されますか?

{}+{}=?

一部のブラウザの実行結果は「[objectObject] [object Object]」であり、一部の実行結果はNaNです。NaNの場合、実行プロセスはポイント5と同様であり、+ Number({})の実行と同等です。 、結果はNaNです。

概要:1。number
+ number = 2 + 3 = 5などの追加操作
2.number + Stringまたはstring + string = stringスプライシング; 1 + 'a' = '1a'
3.Array + Object = string(Array)+ string(Object)
4。{} + any = Number(any)

おすすめ

転載: blog.csdn.net/weixin_43169949/article/details/95016829