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)行遍歷及相鄰元素比對童芹。
?