判斷引用數據類型的類
1,constructor 可以檢測出當前具體屬于哪個類
2,instanceof 斷某個對象是否屬于哪個類?返回的是個布爾值
3.console.log(Object.prototype.tostring.call())可以打印出對象的詳細信息
4.typeof只能檢測基本數據類型,不能具體檢測引用數據類型。
函數function
函數的定義階段
- 1, 定義函數相當于開辟了一個內存空間,給這個空間起個名字。
- 2,把函數體內的所有js代碼作為字符串存在內存空間中
- 3,把內存空間名賦值給變量名
函數的調用
- 1,形成一個私有作用域
- 2,把內存中的字符串拿出來作為js代碼
- 函數名();
- 函數只定義,不調用,什么都不會發生
關于函數的返回值
- 返回值:return;
- undefined出現的情況
- 1:函數沒有寫return;
- 2:函數寫了return,但是沒有賦值;
- 3:只定義了形參,但是沒有傳實參;
- 4:聲明了變量,但是對變量沒有賦值
- arguements.callee 打印出函數本身。
函數的有名函數和匿名函數
- 1:有名函數:給元素的某個屬性綁定一個函數表達式。
- 2:匿名函數:函數自己調用自己。
閉包
- 1:當函數被調用的時候,形成一個私有作用域,保護里邊的變量不收干擾,函數的這種保護機制,叫做閉包。
- 2:子函數可以使用父函數的私有變量。
數組的增刪改除
- 增加 .push在數組末尾增加項 參數:有 返回值:數組長度 原始數組是否改變:是
- ary.push('sss')
- 刪除 .pop刪除數組末尾項 參數:無
返回值:被刪除的內容 原始數組是否改變:是- ary.pop()
- 給開頭增加 unshift()
功能:給數組增加一個或多個
參數:有,一個或多個
返回值:數組的長度
原始數組是否改變:是- aty.unshift('');
- splice
- 參數是一個的時候,從參數開始后邊的全部刪除,返回刪除的參數以新數組的方式存在
- 參數是兩個的時候 splice(2,3)
- 從索引開始,刪除3個
- ary.shift()
數組克隆
- slice(n,m)從索引n克隆到m。但是包前不包后。
數組拼接
- concat ary1.concat(ary2,ary3)
- 克隆 ary.concat() 不要傳參。
數組的翻轉
- reverse()
- 返回值:就是翻轉后的新數組。
數組的排序
- sort()
ary.sort(function(n,m){
return(n-m);//從小到大排序
return(m-n);//從大到小排序
})
數組轉字符串
- ary.toString()把數組轉成以逗號分割的字符串
- ary.join('拼接方式')
- eval()可以實現數學 運算
數組常用但不兼容的方法
- ary.indexOf() 查找數組中是否有某項,如果有返回對應內容的索引,如果沒有返回-1;
- ary.forEach()
- forEach接收兩個參數,一個callback,thisArg
- callback接收三個參數:1)item 2)index 3)input
- thisArg用來改變callback中的this指向;
- forEach 沒有返回值,但是map有返回值
- ary.map() 和forEach相似,除了返回值不一樣
選項卡里面,自動計算選項卡寬度
oWrap.style.width=aBtn.length*aBtn[0].offsetWidth+'px';
總結
- 給數組末尾增加一項有哪些方法?
- push()
- splice(ary.length,0,'xxx')
- ary[ary.length]=xxx;
擴展題
- 刪除數組最后一項有幾種方法?
- pop()
- splice(ary.length-1,1)
- 數組克隆有幾種方法?
- .slice()
- .slice(o)
- .concan()
- 請實現數組去重?
- 利用對象不重名的特性;2個 重點
- tab(id,設置默認選中項);注意,第二個參數可傳可不傳,如果傳了,按照第二個參數顯示默認項,如果沒傳,默認選中第一項; 重點
if ((h>=1)&&(h<=aBtn.length)) {
aBtn[h-1].className = 'on';
aDiv[h-1].className = 'show';
}
else {
aBtn[0].className = 'on';
aDiv[0].className = 'show';
}