JavaScript で [1,2] + [3,4] が [1,2,3,4] に等しくない理由の問題を解決する

黄舟
リリース: 2017-08-10 11:02:18
オリジナル
2304 人が閲覧しました

問題

配列を別の配列に追加したいので、firebugで次のコードを書きました:


[1,2] + [3,4]
ログイン後にコピー

しかし、予想外に、出力:


"1,23,4"
ログイン後にコピー

期待どおりの出力がありません:


[1,2,3,4]
ログイン後にコピー

答え

JavaScript の + 演算子には 2 つの目的があります:

  • 2 つの数値を加算する;

  • 2 つの文字列を連結します。

仕様では配列に対する + 演算子の動作は定義されていないため、JavaScript はまず配列を文字列に変換し、次にその文字列に対して + 演算を実行します。

2 つの配列を連結したい場合は、配列の concat メソッドを使用できます:


[1, 2].concat([3, 4]) // [1, 2, 3, 4]
ログイン後にコピー

JavaScript の + 演算子の概要

JavaScript には 6 つの組み込みデータ型があります: (注釈: 指定されたデータ型から)接続、オリジナル JavaScript には実際には 2 つの型システムがあり、最初の型システムは <code><strong><span style="color: #ff0000;">typeof</span></strong> 来识别,称之为原始(primitive)类型系统,而第二套类型系统是以它为基础,从 object 这一种类型中发展起来的,即对象类型系统,对象类型系统用 instanceof 来识别。)

  • undefined

  • boolean

  • number

  • string

  • function

  • object

需要注意的是,null <strong><span style="color: #ff0000;">[]</span></strong> 是两个截然不同的类型,当使用 <code><strong><span style="color: #ff0000;">typeof</span></strong> 运算时,它们却都返回 object。 但是在使用 + 运算符时,在这两种情况下的工作方式是不同的。

在JavaScript 中,数组不是基本类型,它的存在仅仅是一个糖衣语法,它其实是 Array 类的实例。(ps:function 其实也是Function 类实例的糖衣语法。)

如果说道现在你脑子还是清醒的,是时候加点儿猛料了。javascript 的对象包装器类型例如 new Number(5), new Boolean(true)<strong><span style="color: #ff0000;">new String("abc")</span></strong> 也都是 object 类型,它们不是数字,布尔,字符串。然而,对于算数运算符 Number Boolean 表现的为数字。

还记得我前面说过的 + 运算符吗?它的操作对象是 数字和字符串,也就是 NumberBooleanString 或者 numberbooleanstringtypeof
によって識別されます。オブジェクト型システムはプリミティブ型システムと呼ばれ、これをベースにしてオブジェクト型から発展したもの、つまりオブジェクト型システムは

instanceof で表されます。

null

</p>🎜[]🎜🎜は、🎜🎜🎜🎜を使用する場合、2つの完全に異なるタイプであることに注意してください。 🎜🎜typeof🎜🎜 操作では、それらはすべて 🎜🎜object🎜🎜 を返します。 ただし、+ 演算子を使用する場合、これら 2 つの場合の動作方法が異なります。 🎜🎜JavaScript では、🎜🎜配列は基本型ではありません🎜🎜。その存在は、実際には 🎜🎜 Array のインスタンスです。 🎜🎜クラス。 (追記: 🎜🎜function🎜🎜 は、実際には 🎜🎜Function 🎜🎜クラス インスタンスの糖衣構文です。)🎜🎜 あなたの心がまだはっきりしているなら、それは次のとおりです。さらにいくつか追加する時間があります。なんと驚くべきことでしょう。 javascript のオブジェクト ラッパー タイプ (🎜🎜 new Number(5)🎜🎜、🎜🎜new Boolean(true))、 など>🎜🎜new String("abc")🎜🎜 object タイプであり、数値、ブール値、文字列ではありません。ただし、算術演算子の NumberBoolean は数値を表します。 🎜🎜前に述べた + 演算子を覚えていますか?その操作オブジェクトは数値と文字列です。つまり、🎜🎜Number🎜🎜、🎜🎜Boolean🎜🎜、🎜🎜String 🎜🎜 または🎜🎜 数値🎜🎜、🎜🎜ブール値🎜🎜、🎜🎜文字列🎜🎜。 🎜次の表は、+ 演算子がさまざまなタイプで演算された後に得られる結果のタイプです🎜

----------------------------------------------------------------------------------------
           | undefined | boolean | number | string | function | object | null   | array
----------------------------------------------------------------------------------------
undefined  | number    | number  | number | string | string   | string | number | string
boolean    | number    | number  | number | string | string   | string | number | string

number     | number    | number  | number | string | string   | string | number | string

string     | string    | string  | string | string | string   | string | string | string
function   | string    | string  | string | string | string   | string | string | string

object     | string    | string  | string | string | string   | string | string | string
null       | number    | number  | number | string | string   | string | number | string

array      | string    | string  | string | string | string   | string | string | string
-------------------------------------------------------------------------------------------
ログイン後にコピー
🎜🎜この表は、Chrome 13、Firefox 6、Opera 11、および IE9 に適用されます。下調べ: 他のブラウザの互換性を確認してください。 🎜🎜🎜注: ユーザー定義オブジェクトに対する + 操作は、常に文字列の結果を生成するとは限りません。これは主に、オブジェクト型からネイティブ型への変換がどのように実装されるかによって決まります。 🎜🎜例: 🎜
var o = { 
    valueOf : function () { return 4; } 
};
ログイン後にコピー
🎜 o + 2 を計算すると、数値である 6 が得られ、o + '2' を計算すると、文字列である '42' が得られます。 🎜

以上がJavaScript で [1,2] + [3,4] が [1,2,3,4] に等しくない理由の問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート