2022-03-04JS

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide

JavaScript 數(shù)據(jù)類型

JavaScript 變量能夠保存多種數(shù)據(jù)類型:數(shù)值、字符串值媒殉、數(shù)組枚冗、對象等等:

typeof 運(yùn)算符

可使用 JavaScript 的?typeof?來確定 JavaScript 變量的類型:

typeof 運(yùn)算符返回變量或表達(dá)式的類型:

實(shí)例

typeof""????// 返回 "string"

typeof"Bill"????// 返回 "string"

typeof"Bill Gates"????// 返回 "string"

typeof 運(yùn)算符對數(shù)組返回 "object"申眼,因?yàn)樵?JavaScript 中數(shù)組屬于對象病毡。

在 JavaScript 中有送,沒有值的變量阵赠,其值是?undefined轧铁。typeof 也返回?undefined救斑。

任何變量均可通過設(shè)置值為?undefined?進(jìn)行清空运沦。其類型也將是?undefined携添。

空值

空值與?undefined?不是一回事嫁盲。

空的字符串變量既有值也有類型。

Null

在 JavaScript 中烈掠,null?是 "nothing"羞秤。它被看做不存在的事物。

不幸的是左敌,在 JavaScript 中瘾蛋,null?的數(shù)據(jù)類型是對象。

您可以把?null?在 JavaScript 中是對象理解為一個 bug母谎。它本應(yīng)是?null瘦黑。

您可以通過設(shè)置值為?null?清空對象:

Undefined?與?null?的值相等京革,但類型不相等:

復(fù)雜數(shù)據(jù)

typeof?運(yùn)算符可返回以下兩種類型之一:

function

object

typeof?運(yùn)算符把對象奇唤、數(shù)組或?null?返回?object。

typeof?運(yùn)算符不會把函數(shù)返回?object匹摇。

實(shí)例

typeof{name:'Bill', age:62}// 返回 "object"typeof[1,2,3,4]// 返回 "object" (并非 "array"咬扇,參見下面的注釋)typeofnull// 返回 "object"typeoffunctionmyFunc(){}// 返回 "function"



整理了以下數(shù)組方法

join():就是把數(shù)組轉(zhuǎn)換成字符串,然后給他規(guī)定個連接字符廊勃,默認(rèn)的是逗號(? 懈贺,)

var arr = [1,2,3];console.log(arr.join());     // 1,2,3

console.log(arr.join("-"));   // 1-2-3

console.log(arr);         // [1, 2, 3](原數(shù)組不變)

push()和pop()? ?? (?修改原數(shù)組?)

添加或移除數(shù)組最后一項(xiàng)

shift() 和 unshift()? ? ( 修改原數(shù)組 )

shift():刪除原數(shù)組第一項(xiàng)经窖,并返回刪除元素的值;如果數(shù)組為空則返回undefined 梭灿。?

unshift:將參數(shù)添加到原數(shù)組開頭画侣,并返回?cái)?shù)組的長度 。

sort()

將數(shù)組里的項(xiàng)從小到大排序

sort()方法比較的是字符串堡妒,沒有按照數(shù)值的大小對數(shù)字進(jìn)行排序配乱,要實(shí)現(xiàn)這一點(diǎn),就必須使用一個排序函數(shù)

function sortNumber(a,b){  return a - b}

arr = [13, 24, 51, 3]; console.log(arr.sort());           // [13, 24, 3, 51]

console.log(arr.sort(sortNumber));     // [3, 13, 24, 51](數(shù)組被改變)

reverse()

反轉(zhuǎn)數(shù)組項(xiàng)的順序皮迟。

concat() (不改變原數(shù)組)

將參數(shù)添加到原數(shù)組中搬泥。這個方法會先創(chuàng)建當(dāng)前數(shù)組一個副本,然后將接收到的參數(shù)添加到這個副本的末尾伏尼,最后返回新構(gòu)建的數(shù)組忿檩。在沒有給 concat()方法傳遞參數(shù)的情況下,它只是復(fù)制當(dāng)前數(shù)組并返回副本爆阶。

slice()? ?截取子集數(shù)組

返回從原數(shù)組中指定開始下標(biāo)到結(jié)束下標(biāo)之間的項(xiàng)組成的新數(shù)組燥透。slice()方法可以接受一或兩個參數(shù),即要返回項(xiàng)的起始和結(jié)束位置辨图。在只有一個參數(shù)的情況下兽掰, slice()方法返回從該參數(shù)指定位置開始到當(dāng)前數(shù)組末尾的所有項(xiàng)。如果有兩個參數(shù)徒役,該方法返回起始和結(jié)束位置之間的項(xiàng)——但不包括結(jié)束位置的項(xiàng)孽尽。

splice() 刪除、插入和替換忧勿。

刪除:指定 2 個參數(shù):要刪除的第一項(xiàng)的位置和要刪除的項(xiàng)數(shù)杉女。

書寫格式:arr.splice( 1 , 3? )

插入:可以向指定位置插入任意數(shù)量的項(xiàng),只需提供 3 個參數(shù):起始位置鸳吸、 0(要刪除的項(xiàng)數(shù))和要插入的項(xiàng)熏挎。

書寫格式:arr.splice(??2,0,4,6??)

替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng)晌砾,只需指定 3 個參數(shù):起始位置坎拐、要刪除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等养匈。

書寫格式:arr.splice(??2,0,4,6??)

var arr = [1,3,5,7,9,11]哼勇;

var arrRemoved = arr.splice(0,2);

console.log(arr);                //[5, 7, 9, 11]

console.log(arrRemoved);            //[1, 3]

var arrRemoved2 = arr.splice(2,0,4,6);

console.log(arr);                // [5, 7, 4, 6, 9, 11]

console.log(arrRemoved2);           // []

var arrRemoved3 = arr.splice(1,1,2,4);

console.log(arr);                // [5, 2, 4, 4, 6, 9, 11]

console.log(arrRemoved3);           //[7]

indexOf()和 lastIndexOf() (ES5新增)

indexOf() 方法可返回?cái)?shù)組中某個指定的元素第一次出現(xiàn)位置。

lastIndexOf() 方法可返回?cái)?shù)組中某個指定的元素最后一次出現(xiàn)位置呕乎。

forEach() (ES5新增)

對數(shù)組進(jìn)行遍歷循環(huán)积担,對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。這個方法沒有返回值猬仁。參數(shù)都是function類型帝璧,默認(rèn)有傳參先誉,參數(shù)分別為:遍歷的數(shù)組內(nèi)容;第對應(yīng)的數(shù)組索引的烁,數(shù)組本身褐耳。

map() (ES5新增)

指“映射”,對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)渴庆,返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組漱病。

var arr = [1, 2, 3, 4, 5];

var arr2 = arr.map(function(item){return item*item;});console.log(arr2);         //[1, 4, 9, 16, 25]

filter() (ES5新增)

“過濾”功能,數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)把曼,返回滿足過濾條件組成的數(shù)組杨帽。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var arr2 = arr.filter(function(x, index) {return index % 3 === 0 || x >= 8;});

console.log(arr2);         //[1, 4, 7, 8, 9, 10]

every() (ES5新增)

判斷數(shù)組中每一項(xiàng)都是否滿足條件,只有所有項(xiàng)都滿足條件嗤军,才會返回true注盈。

var arr = [1, 2, 3, 4, 5];var arr2 = arr.every(function(x) {return x < 10;});

console.log(arr2);         //true

var arr3 = arr.every(function(x) {return x < 3;});

console.log(arr3);         // false

some() (ES5新增)

判斷數(shù)組中是否存在滿足條件的項(xiàng),只要有一項(xiàng)滿足條件叙赚,就會返回true老客。

javascript如何判斷對象是否是數(shù)組?

1震叮、使用isArray方法

var cars=new Array();

cars[0]="Saab";

cars[1]="Volvo";

cars[2]="BMW";

// 判斷是否支持該方法

if (Array.isArray) {

? ? if(Array.isArray(cars)) {

? ? ? ? document.write("該對象是一個數(shù)組胧砰。") ;

? ? }}

2、使用instanceof(立刻)操作符

var cars=new Array();

cars[0]="Saab";

cars[1]="Volvo";

cars[2]="BMW";

// 判斷是否支持該方法

if (Array.isArray) {

? ? if(Array.isArray(cars)) {

? ? ? ? document.write("該對象是一個數(shù)組苇瓣。") ;

? ? }

}

document.write("<br />") ;

if (cars instanceof Array) {

? ? document.write("該對象是一個數(shù)組尉间。") ;

}

數(shù)組去重的方法

一、利用ES6 Set去重(ES6中最常用)

function unique (arr) {

? return Array.from(new Set(arr))

}

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];

console.log(unique(arr))

?//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]

不考慮兼容性击罪,這種去重的方法代碼最少哲嘲。這種方法還無法去掉“{}”空對象,后面的高階方法會添加去掉重復(fù)“{}”的方法媳禁。

二眠副、利用for嵌套for,然后splice去重(ES5中最常用)

function unique(arr){

? ? ? ? for(var i=0; i<arr.length; i++){

? ? ? ? ? ? for(var j=i+1; j<arr.length; j++){

? ? ? ? ? ? ? ? if(arr[i]==arr[j]){? ? ? ? //第一個等同于第二個竣稽,splice方法刪除第二個

? ? ? ? ? ? ? ? ? ? arr.splice(j,1);

? ? ? ? ? ? ? ? ? ? j--;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

return arr;

}

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];

? ? console.log(unique(arr))

? ? //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]? ? //NaN和{}沒有去重囱怕,兩個null直接消失了

雙層循環(huán),外層循環(huán)元素毫别,內(nèi)層循環(huán)時(shí)比較值娃弓。值相同時(shí),則刪去這個值拧烦。

想快速學(xué)習(xí)更多常用的ES6語法忘闻,可以看我之前的文章《學(xué)習(xí)ES6筆記──工作中常用到的ES6語法》

三恋博、利用indexOf去重

function unique(arr) {

? ? if (!Array.isArray(arr)) {

? ? ? ? console.log('type error!')

? ? ? ? return

? ? }

? ? var array = [];

? ? for (var i = 0; i < arr.length; i++) {

? ? ? ? if (array .indexOf(arr[i]) === -1) {

? ? ? ? ? ? array .push(arr[i])

? ? ? ? }

? ? }

? ? return array;

}

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];

console.log(unique(arr))

? // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]? //NaN齐佳、{}沒有去重

新建一個空的結(jié)果數(shù)組,for 循環(huán)原數(shù)組债沮,判斷結(jié)果數(shù)組是否存在當(dāng)前元素炼吴,如果有相同的值則跳過,不相同則push進(jìn)數(shù)組疫衩。

四硅蹦、利用sort()

function unique(arr) {

? ? if (!Array.isArray(arr)) {

? ? ? ? console.log('type error!')

? ? ? ? return;

? ? }

? ? arr = arr.sort()

? ? var arrry= [arr[0]];

? ? for (var i = 1; i < arr.length; i++) {

? ? ? ? if (arr[i] !== arr[i-1]) {

? ? ? ? ? ? arrry.push(arr[i]);

? ? ? ? }

? ? }

? ? return arrry;

}

? ? var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];

? ? ? ? console.log(unique(arr))

//?[0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined]? ? ? //NaN、{}沒有去重

利用sort()排序方法闷煤,然后根據(jù)排序后的結(jié)果進(jìn)行遍歷及相鄰元素比對童芹。


?

String 對象





?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鲤拿,隨后出現(xiàn)的幾起案子假褪,更是在濱河造成了極大的恐慌,老刑警劉巖近顷,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生音,死亡現(xiàn)場離奇詭異,居然都是意外死亡窒升,警方通過查閱死者的電腦和手機(jī)缀遍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饱须,“玉大人域醇,你說我怎么就攤上這事∪叵保” “怎么了歹苦?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長督怜。 經(jīng)常有香客問我殴瘦,道長,這世上最難降的妖魔是什么号杠? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任蚪腋,我火速辦了婚禮,結(jié)果婚禮上姨蟋,老公的妹妹穿的比我還像新娘屉凯。我一直安慰自己,他們只是感情好眼溶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布悠砚。 她就那樣靜靜地躺著,像睡著了一般堂飞。 火紅的嫁衣襯著肌膚如雪灌旧。 梳的紋絲不亂的頭發(fā)上绑咱,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音枢泰,去河邊找鬼描融。 笑死,一個胖子當(dāng)著我的面吹牛衡蚂,可吹牛的內(nèi)容都是我干的窿克。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毛甲,長吁一口氣:“原來是場噩夢啊……” “哼年叮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玻募,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤只损,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后补箍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改执,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年坑雅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辈挂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡裹粤,死狀恐怖终蒂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遥诉,我是刑警寧澤拇泣,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站矮锈,受9級特大地震影響霉翔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苞笨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一债朵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瀑凝,春花似錦序芦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春宪塔,著一層夾襖步出監(jiān)牢的瞬間磁奖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工蝌麸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留点寥,地道東北人艾疟。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓来吩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔽莱。 傳聞我的和親對象是個殘疾皇子弟疆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容