摘要:但是在使用運算符時,在這兩種情況下的工作方式是不同的。在中,數組不是基本類型,它的存在僅僅是一個糖衣語法,它其實是類的實例。然而,對于算數運算符和表現的為數字。注意用戶自定義對象進行運算不一定總產生一個字符串結果。
問題
我想將一個數組追加到另一個數組的后面,于是我在 firebug 編寫如下代碼:
[1,2] + [3,4]
但是,出乎意料,它卻輸出了:
"1,23,4"
而沒有輸出我期望的:
[1,2,3,4]解答
JavaScript 的 + 運算符有兩個目的:
將兩個數相加;
將兩個字符串連接。
規范并沒有定義 + 運算符在數組上的行為,所以javascript 首先 把數組轉換成字符串,然后在字符串上進行 + 運算。
如果想連接兩個數組,可以使用數組的 concat 方法:
[1, 2].concat([3, 4]) // [1, 2, 3, 4]javascript 中的 + 運算符概述
JavaScript 具有 6 種內置數據類型: (譯注:從給出的連接看,原作者的意思應該是 原始類型系統 的數據類型,JavaScript 事實上有兩套類型系統。 第一套類型系統是用 typeof 來識別,稱之為原始(primitive)類型系統,而第二套類型系統是以它為基礎,從 object 這一種類型中發展起來的,即對象類型系統,對象類型系統用 instanceof 來識別。)
undefined
boolean
number
string
function
object
需要注意的是,null 和 [] 是兩個截然不同的類型,當使用 typeof 運算時,它們卻都返回 object。 但是在使用 + 運算符時,在這兩種情況下的工作方式是不同的。
在JavaScript 中,數組不是基本類型,它的存在僅僅是一個糖衣語法,它其實是 Array 類的實例。(ps:function 其實也是 Function 類實例的糖衣語法。)
如果說道現在你腦子還是清醒的,是時候加點兒猛料了。javascript 的對象包裝器類型例如 new Number(5), new Boolean(true) 和 new String("abc") 也都是 object 類型,它們不是數字,布爾,字符串。然而,對于算數運算符 Number 和 Boolean 表現的為數字。
還記得我前面說過的 + 運算符嗎?它的操作對象是 數字和字符串,也就是 Number,Boolean,String 或者 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 and IE9。課外作業:檢查其他的瀏覽器兼容性。
注意:用戶自定義對象進行 + 運算不一定總產生一個字符串結果。這主要取決于 對象類型到原生類型轉換 的實現方式。
例如:
var o = { valueOf : function () { return 4; } };
計算 o + 2 將得到 6, 是一個數字 number;計算 o + "2" 得到 ‘42’, 是一個字符串 string。
轉載地址:https://segmentfault.com/a/1190000000264382
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89767.html
摘要:但是在使用運算符時,在這兩種情況下的工作方式是不同的。在中,數組不是基本類型,它的存在僅僅是一個糖衣語法,它其實是類的實例。然而,對于算數運算符和表現的為數字。課外作業檢查其他的瀏覽器兼容性。 在 stackoverflow 上有人提問:arrays - Why does [1,2] + [3,4] = 1,23,4 in JavaScript? 問題 我想將一個數組追加到另一個數...
摘要:變量名必須以字母美元符號下劃線開始,只能包含字母數字下劃線和美元符號。你有元現在是第年小練習計算從和增長到自身的倍需要的次數。 2.3 程序的構成 表達式,用于計算并得到值; 變量,用于保存數據,以便將來使用; 語句,用于執行腳本的操作; 2.3.1 表達式 2 2+8.1+5 (2+8.1)* 5 9>4 9>4 && 1===2 dog+house Hello.length ...
摘要:如果返回值是一個原始值,則返回這個原始值。如果或者中的任意一個為字符串,則將另外一個也轉換成字符串,然后返回兩個字符串連接操作后的結果。因此,的結果實際上是兩個空字符串的連接。 原文:What is {} + {} in JavaScript? 譯者:justjavac 最近,Gary Bernhardt 在一個簡短的演講視頻Wat中指出了一個有趣的 JavaScript 怪癖...
摘要:如果參數不在與之間,該方法將返回一個空字符串這個不解釋了方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。 主要總結 JavaScript的六種數據類型:Boolean、Number、String、Null、Undefined、Object 布爾類型 布爾真假判定:短路原則 x && y 只有在x和y都為真的情況下為真。即真真為真,短路:因比較運算為左...
摘要:調用堆棧是存放原始數據類型的地方除了函數調用之外。上一節中聲明變量后調用堆棧的粗略表示如下。解釋改變的正確方法是更改內存地址。在聲明時,將在調用堆棧上分配內存地址,該值是在堆上分配的內存地址。 這是專門探索 JavaScript 及其所構建的組件的系列文章的第 21 篇。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 如果你錯過了前面的章節,可以在這里找到它們:...
閱讀 1750·2021-09-23 11:34
閱讀 2472·2021-09-22 15:45
閱讀 12818·2021-09-22 15:07
閱讀 2220·2021-09-02 15:40
閱讀 4105·2021-07-29 14:48
閱讀 1071·2019-08-30 15:55
閱讀 3244·2019-08-30 15:55
閱讀 2189·2019-08-30 15:55