每日單詞
info:信息 | largest:最大的 |
---|---|
invalid:無效的 | indicate:表示 |
incorrect:不正確的 | conventional:常規(guī)的 |
topic:主題 | has been:已經(jīng) |
JavaScript中的數(shù)據(jù)類型有哪些固蛾?
- number:數(shù)字结执;
- boolean:布爾;
- string:字符串艾凯;
- Object:對象献幔;
- null:空;
- undefined:未定義趾诗;
- symbol:獨一無二的值
如何判斷某變量是否為數(shù)組變量?
-
instanceof
instanceof 方法主要是檢測 變量的constructor 是否與 Array相等蜡感,也就是檢測的變量的原型鏈?zhǔn)欠裰赶駻rray構(gòu)造函數(shù)的prototype原型上。
例:
var arr = [4,67,23];
console.log(arr instanceof Array) //true
補充:但是instanceof不一定能保證檢測的結(jié)果一定正確恃泪,例如index頁面?zhèn)魅胍粋€arr變量給iframe去處理郑兴,則即使arr instanceof Array還是返回false,因為兩個引用的Array類型不是同一個悟泵。并且constructor可以重寫所以不能確保萬無一失杈笔。
-
constructor 同上
例: var arr = []; arr.constructor === Array ruturn true
因為constructor可以被重寫,所以不能確保一定是數(shù)組
例:
var str = 'abc';
str.constructor = Array;
str.constructor === Array // return true
//而很明顯str不是數(shù)組
-
Array.isArray()
ES5 在Array上新增了檢測數(shù)組的方法糕非,因為是新的方法蒙具,瀏覽器有一定的兼容問題
終極方法,可以確保方法能檢測一定是數(shù)組
-
Object.prototype.toString.call()
例: var arr = [34,65,1]; Object.prototype.toString.call(arr) === '[object Array]' //return true
總結(jié):
由于Array.isArray()是封裝在瀏覽器中,運行效率比較高朽肥,所以當(dāng)真正需要檢測一個變量類型時禁筏,先會檢測瀏覽器是否支持Array.isArray(), 之后在用Obejct.prototype.toString()方法:
所以周全的封裝的代碼如下:
var arr = [1,3];
function isArray(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
JavaScript中什么是偽數(shù)組,如何將偽數(shù)組轉(zhuǎn)化為真正的數(shù)組衡招?
偽數(shù)組:
1.具有l(wèi)ength屬性
2.按索引方式存儲數(shù)據(jù)
3.不具有數(shù)組的push,pop等方法
轉(zhuǎn)化
1.可以使用Array.prototype.slice.call(fakeArray)將數(shù)組轉(zhuǎn)化為真正的Array對象篱昔。
2.ES6中Array.from方法用于將兩類對象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對象(array-like object)和可遍歷(iterable)的對象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)。