對象由鍵值對組成node
鍵值對由逗號隔開json
鍵值對由屬性名和屬性值組成數組
屬性名和屬性值用冒號隔開瀏覽器
前面的是屬性名,後面的是屬性值bash
對象沒有length屬性app
console.log(a.length);//undefined
複製代碼
var obj={a:1,b:2,c:"zhufeng",1:100}
console.log(obj.a);
console.log(obj["a"]);
複製代碼
var obj={a:1,b:2,c:"zhufeng",1:100}
obj.d="培訓";
obj["d"]="培訓";
console.log(obj);
複製代碼
var obj={a:1,b:2,c:"zhufeng",1:100}
obj.c="培訓";
obj["c"]="北京";
console.log(obj);
複製代碼
delete + 對象名,屬性名
var obj={a:1,b:2,c:"zhufeng",1:100}
delete obj.c;
console.log(obj);
obj.a若是放在等號的左邊,那麼是被賦值或修改;放在等號的右邊,是在獲取賦值
obj.a=10;
obj.a=obj.b
複製代碼
var obj={a:1,b:2,c:"zhufeng",1:100}
var d=19;
var obj={a:1,b:"zfpx",c:d};
obj.a=11;
obj.a=a;
複製代碼
var a=Number("213");//213
var a=Number("213px");//NaN
var a=Number(false);//true=1 false=0
var a=Number(false);//null=0 undefined=NaN
複製代碼
isNaN:用來判斷是不是一個非有效數字的方法,若是是有效數字返回false,不是返回true;dom
isNaN 執行時先默認調用number方法,把值轉換爲number類型;而後再判斷異步
console.log(isNaN(19));false;
console.log(isNaN(NaN));true;
複製代碼
console.log(parseInt("12px"));12;
console.log(parseInt("12px12"));12;
console.log(parseInt("px12"));NaN;
複製代碼
console.log(parseFloat("12.66px"));12.66
console.log(parseFloat("12.66.66px"));12.66
複製代碼
var num =12.8998;
// number.toFixed(保留的位數)
199.22222.toFixed(3);
console.log(num.toFixed(2));//199.200
複製代碼
基本數據類型: number string boolean null undefined函數
引用數據類型:對象數據類型和函數數據類型字體
對象數據類型: 對象{} 數組[] 正則 Math Date的實例...
函數數據類型: 函數類
基本和引用區別:
基本數據類型操做是值
引用數據類型操做的是空間地址
基本數據類型存儲到棧內存中
引用數據類型都存儲到堆內存中
var num = 100;
var obj = {};// obj 存儲的是一個空間地址;
var arr = [];
複製代碼
// 用typeof檢測數據類型
console.log(typeof 100); // "number"
console.log(typeof "zhufeng"); //"string"
console.log(typeof true); //"boolean"
console.log(typeof null); //"object"
console.log(typeof {}); //"object"
console.log(typeof []); //"object"
console.log(typeof function); //"function"
console.log(typeof undefined); //"undefined"
複製代碼
有length:屬性值表明數組成員的個數
索引:表明數組成員的屬性名從0開始
var arr=[1,2,3,4,100];
console.log(arr.length);
複製代碼
var arr=[1,2,3,4,100];
console.log(arr[2]);
複製代碼
push:在數組末尾追加元素
push方法的參數:要追加到數組後面的元素;能夠是多個;用逗號隔開
須要傳參
push方法的返回值:執行完成,新數組長 度
var arr =[1,2];
arr.push("a"); // [1,2,"a"]
console.log(arr);
複製代碼
pop:從數組末尾去掉一個元素
pop:方法沒有參數
pop:返回值;刪除末尾數組元素後的數組
pop方法原數組發生變化
var arr=["a","n",1,"m"]; //length=4
var ret=arr.pop();
console.log(arr);
複製代碼
unshift:在數組的前面添加元素
unshift:方法參數:要添加的值;能夠爲 多個參數
unshift:返回值新數組長度,lenght
var arr=[1,2,3,4];
arr.unshift(0);
console.log(arr)
複製代碼
shift:從數組的前面刪除一第個元素
shift方法沒有參數
shift方法返回值:被刪除的數組的第一項成員
var arr=[1,2,3,4,5];
arr.shift(1);
console.log(arr);
複製代碼
slice:截取數組
slice:方法參數:若是是兩個參數;第一個參數是開始位置的索引;
第二個參數是結束爲止的索引;不包括第二個參數的位置
slice返回值:截取的那一部分數據,以數組的方式返回
若是是一個參數參數是開始位置的索引截取到整個數組的最後一位
參數若是是負數;數組的長度+負數獲得的值;數組的下標
沒有參數複製一份數組
原有數組不發生改變
支持負數
var arr=[1,2,3,4,5,6,7];
arr.slice(2,5);
console.log(arr);
複製代碼
splice:刪除原有數組的項第一個參數;開始位置的索引刪除的長度;返回值是刪除的項;以數組的形式返回
替換/修改第一個參數,開始位置的索引
第二個參數,是刪除的長度,剩下的參數;被添加到原來開始位置索引的數組元素
添加:第二個參數爲0(不刪除),而後再原有的位置;添加後面參數元素的值。
原來的數組發生了變化
參數爲0所有刪除
var arr=["a","b","c","d","e","f"];
arr.splice(2,2);
console.log(arr);
複製代碼
sort:排序 只能排相同位數的數組
對數組進行排序
參數無關緊要
沒有參數 只能排相同位數
var ary=[1,23,435,46,34,653];
ary.sort(function(a,b){return a-b}) 從小到大
ary.sort(function(a,b){return b-a}) 從大到小
複製代碼
reverse:將數組倒序排列
不須要參數
返回值是數組倒序以後的數組
原有數組發生改變
indexOf:用來獲取當前數組成員第一次出現的索引位置
須要參數;若是數組成員不存在這一項返回-1
若是參數存在 返回當前項索引 不存在返回-1
原有數組不發生改變
0返回也是-1
lastIndexOf:用來效驗數組成員最後一次出現的索引位置
須要參數 若是不存在返回-1
返回最後一次的索引或者是不存在就返回-1
原有數組不發生改變
0返回也是-1
concat:數組的拼接
須要參數 沒有參數就是複製同樣的參數
返回是拼接後的數組
原有數組不變
join:按照指定的字符進行拼接成一個字符串
須要參數 若是不寫 默認是逗號隔開
返回一個鏈接後的字符串
原有數組不變
forEach:用來遍歷數組每一項
須要參數 一、第一個是數組的每一項 二、數組成員的索引 三、要循環的數組
返回的是undefined
原有數組不發生改變
ary.forEach(function (a,b,c){
a:數組的每一項
b:數組成員的索引
c:要循環的數組
})
複製代碼
循環數組
有返回值
map:遍歷 映射
須要參數
返回是映射以後的數組
原有數組不發生變化
map裏有return屬性
console.log(Math);
console.log(typeof Math);
複製代碼
console.log(Math.abs(3)); //3
複製代碼
console.log(Math.floor(5.9999)); //5
複製代碼
console.log(Math.ceil(5.0001)); //6
複製代碼
console.log(Math.max(12,3,22,56,5,7,8)); //56
複製代碼
console.log(Math.min(1,23,45,2,4,5)); //1
複製代碼
console.log(Math.random());
複製代碼
console.log(Math.round(4.756)); //5
複製代碼
Math.round(Math.random()*(n-m)+m)
複製代碼
console.log(Math.pow(3,3)); // 3*3*3--27
複製代碼
十、Math.sqrt(16); 開16的平方---4
console.log(Math.sqrt(16)); //4
複製代碼
有length
索引
字符串是不能根據索引修改的、只能用索引來獲取
字符串運算
+是字符串拼接 其他轉number再運算
var srr="Rocky"
var str=`ma name is ${srr}`
console.log("3px"-"3"); //NaN
複製代碼
var sTc="zhufengpeix"
console.log(str.toUpperCase());//'ZHUFENGPEIX'
複製代碼
console.log(sTr.toLowerCase());
複製代碼
console.log(sTc.charAt[3]);
複製代碼
console.log(sTr.charCodeAt(3));
97-122 a-z 65-90 A-Z
複製代碼
console.log(str.substr(2));
複製代碼
console.log(str.substring(2, -5));
複製代碼
console.log(str.slice(2, -5))
複製代碼
console.log(str.replace("e", "a"));
複製代碼
console.log(str.indexOf("h"));
複製代碼
console.log(str.lastIndexOf("e"));
複製代碼
//支持正則
console.log(str.split(" "));
複製代碼
console.log(str.concat("aaaa"));
複製代碼
console.log(str.trim());
複製代碼
console.log(str.trimLeft());
複製代碼
console.log(str.trimRight());
複製代碼
元素是個對象 元素都是對象數據類型的
獲取不到 獲取結果是null
名字相同 只獲取第一個
上下文只能是document
var oBox= document.getElementById("id名")
//經過標籤名獲取元素
複製代碼
獲取的元素是一個元素集合
支持元素做爲該方法的上下文
var oBox= document.getElementsByTagName("標籤名")
經過class名獲取元素
複製代碼
var oBox= document.getElementsByClassName("class名")
經過name名獲取元素
複製代碼
<div name="boss"></div>
var oBox= document.getElementsByName("boss")
複製代碼
若是是id加上#
若是是class 加上.
var oBox= document.querySelector("選擇器")
複製代碼
document.body
複製代碼
document.documentElement
複製代碼
<div></div>
<div></div>
<div></div>
console.log(document.querySelectorAll("div"))
複製代碼
childNodes: 當前元素全部的子節點
children: 當前元素的全部的子元素節點
parentNode:獲取當前元素的父親節點 document是根節點;他的父親節點是null
previousSibling:上一個哥哥節點
previousElementSibling:上一個哥哥元素節點
nextSibling:下一個弟弟節點
nextElementSibling:下一個弟弟元素節點
firstchild:第一個子節點
firstElementChild:第一個子元素節點
lastChild:最後一個子節點
lastElementChild:最後一個子元素節點
console.log(box.childNodes);
console.log(box.children);
console.log(last.parentNode);
複製代碼
function getBrother(curEle) {
var pre = curEle.previousSibling;
while(pre)
{
if(pre.nodeType===1){
return pre;
}
pre = pre.previousSibling;
// pre等於哥哥節點的哥哥節點;
}
}
複製代碼
var new = document.createElement("div")
複製代碼
// 向容器末尾添加子節點
<div id="box"></div>
box.appendChild(元素)
複製代碼
// 向容器中的某個元素前面插入新元素
容器.insertBefore(newChild,oldChild)
box.insertBefore(newDiv,firet)
複製代碼
//刪除子節點
容器.removeChild(oldChild)
box.removeChild(ul)
複製代碼
//用新的子節點替換老的子節點
容器.replaceChild(newChild,oldChild)
box.replaceChild(newDiv,ul)
複製代碼
cloneNode
克隆一樣的元素
cloneNode的參數一個是true表明深度克隆將後代節點也克隆出來
false:不傳就是false;淺克隆 克隆元素自己 不能克隆元素裏的全部後代節點
默認狀況下只能克隆元素自己 不能克隆元素裏的全部後代節點
不能克隆點擊事件
var divs=box.cloneNode(ture)
複製代碼
// 獲取行間屬性所對應的屬性值
<div id="box" zfpx="hui"></div>
box.getAttribute("zfpx")
複製代碼
//設置行間屬性對應的屬性值
box.setAttribute("a",100)
複製代碼
//移除行間屬性
<div id="box" zfpx="hui"></div>
box.removeAttribute("zfpx")
複製代碼
classList
add 新增類名
remove 移除類名
replace 改變類名(前一箇舊類名,後一個新類名)
box.classList.add("a")
box.classList.replace("a","b")
//前一個參數舊的 後面是新的class
複製代碼
new + 函數:建立這個函數的實例;實例是個對象數據類型
new 是個關鍵字:
console.log(new Date()); //獲取當前電腦的系統時間
複製代碼
getFullYear():返回時間年
getMonth(): 返回時間月【0-11】
getDate(): 返回當前日【1-31】
getDay(): 返回星期幾 【0-6】星期日是0
getHours(): 返回小時 【0-23】
getMinutes(): 返回時間分鐘數 【0-59】
getSeconds():獲取時間秒
getMilliseconds():獲取毫秒數
getTime(): 當前時間距離1970-1-1上午8:00 毫秒差
Date.now():常常用於產生一個時間戳:產生一個惟一的數字
setTimeout 和setInterval
定時器返回值
清除定時器 :claearInterval
alert 彈框 將參數轉成字符串輸出
console.log在控制檯輸出參數可爲多個
confirm 彈框有取消按鈕
document.write()在文檔寫入內容能夠識別標籤
由字母、數字、下劃線、$組成;
不能以數字開頭,嚴格區分大小寫
遵循駝峯命名,第一個單詞的首字母小寫,其他有意義的單詞首字母大寫
不能使用關鍵字和保留字;
innerHTML 能夠識別標籤,innerText 不能夠識別標籤
= : 賦值
var a = document.getElementById("a");
a.onclick = function () {
a.innerHTML += 123
}
複製代碼
isNaN : 校驗是不是一個非有效數字
parseInt:把字符串轉成數字,從左到右依次識別,直到遇到一個非有效數字爲止把識別到的以數字形式返回
parseFloat :多識別一位小數點
toFixed : 保留小數點位數
var a = Number("18")
string
複製代碼
length 索引 "" '';
字符串的運算 - * /
: 字符串的拼接
boolean : true false
Boolean :
js的內置方法;在全局做用下
0 "" NaN null undefined只有這五個值轉 布爾是false
! : 先把後面的值轉成布爾,再取反
console.log(![] == [])// true
console.log([]==[])// false
console.log(![]==false);//true
console.log({a:1}=="[objectobject]")//true
console.log("12px" == 12);
複製代碼
! : 會先把後面的值進行去布爾,而後再取反,最後比較
null undefined: 都表示沒有
var obj = {a:1};//obj=null;
var a;
console.log(a);
console.log(obj.b);// undefined
複製代碼
if (若是)
else if (再者)
else (不然)
break(終止)
js中若是ID名重複,只能獲取第一個id的元素
ID名不能重複、
若是經過id名獲取不到內容,那麼獲取的結果是null
console.log()在控制檯輸出
常常用於調試bug 開發人員使用
console.log(100);
複製代碼
alert:彈出
有且只有彈出第一個數
<script>
alert(222,333,666)
</script>
複製代碼
會讓代碼中止到這一行
會把彈出的值轉成字符串,默認調用tostring方法
console.dir:詳細輸出
console.table:把json數據以表格的形式輸出
變量實際上是一個無心義的名字,它所表明的意義都是其存儲的值
常量:值是不可變的
var + 變量 =值
變量名是本身起的
定義一個變量名是a,把這個10的值賦值給a,那麼a表明這個10
var a=10;
console.log(a);
console.log(a+10);
複製代碼
變量命名規範
變量名是由字每,數字,下劃線,¥組成
變量名數字不能開頭,嚴格區分大小寫
遵循駝峯命名法;第一個單詞首字母小寫;剩餘有意義的單詞首字母大寫;
關鍵字和保留字不能做爲變量名
關鍵字:在js中有特殊意義的單詞都是關鍵字
保留字:將來有可能成爲關鍵字的單詞
<div id="box"></div>
<script>
window.document.getElementById("box").innerHTML("改變內容")
</script>
複製代碼
innerText:不能識別標籤
onclick=function 鼠標點擊事件
前面加元素名
var a= document.getElementById("box");
a.onclick=function() {
//點擊時,此處代碼運行
a.innerHTML="<ahref='http://www.baid.com'>百度</a>";};
複製代碼
對象數據類型:對象 數組 正則
Dote的實例 Math
布爾數據類型
一、Boolean
在boolean只有兩個值:true和false
true:正確 false:錯誤
true--1 false--0
boolean把其餘類型轉布爾類型方法;返回值只有正確和錯誤
在js中只有0、「」、null、undefined、NaN 這五個值轉布爾值是false 其他全是true
負數也是true
console.log(Boolean(0));--false
console.log(Boolean(2));--true
複製代碼
console.log(!NaN);--true
console.log(!"12px");--false
複製代碼
字符串:用單引號或雙引號包起來的值就是字符串類型
length:有長度,length的屬性值表明字符串的個數
var str="wdaifhauohfiuahgfia"
console.log(str.length);
複製代碼
console.log(str[3]);
console.log(str[str.length-1]);
複製代碼
獲取字符串最後一項:
console.log("18-16");2
console.log("18px"-"12");6
console.log("18px"*"12");216
console.log("18px"/"12");1.5
console.log("18px"+"12");18px+12
console.log("18"+"12");1812
複製代碼
經過id獲取元素若是獲取不到內容,那麼默認返回值是null
若是須要銷燬對象的堆內存,那麼會給對象賦值爲null
正則進行捕獲,捕獲不到內容,那麼返回值是null null表示對象指針
indexOf
對象;循環對象;放入新的數組中
操做原有的數組
遞歸:針對函數:在函數內部調用函數自己;讓其執行,這種現象就是函數的遞歸
須要結束條件,結束當前循環
遞歸的時候必定要有一個結束條件 不然會一直循環下去
新建一個數組
把舊數組的第一項push到新數組中
取舊數組中的每一項和新數組中的每一項比較
= 賦值
把10賦值給變量hh
var hh=10;
複製代碼
== 比較;返回一個布爾值;相等返回true,不相等返回false
容許不一樣數據類型之間的比較
若是是不一樣類型的數據進行,會默認進行數據類型之間的轉換
console.log(1==1);//true
console.log(1=="1");//true
console.log(1=="1px");//false
console.log(1==true);//true
複製代碼
console.log({}==[]);//false
console.log({}=={});//false
console.log([]=="");//true
console.log([]==0);//true
複製代碼
console.log(1 === 1 );//true
console.log(1 ===true );//false
console.log(1 === "1");//false
複製代碼
1.操做語句:三個判斷、三個循環
瀏覽器從上到下進行判斷、若是條件成立 就執行那塊代碼
只要有一處知足條件,下面即使條件成立 都不執行
小括號中的條件最後必定要轉成一個布爾值
if ([])
console.log(1)
複製代碼
if(20>10){
if(11<18){
}
}
複製代碼
//條件?條件成立執行:條件不成立執行' 18=="18px"?console.log(18):console.log(19); 複製代碼
var num =10;
switch (num){
csae "10":
console.log(1);
break; //終止不讓向下進行判斷
case "10px":
console.log(2);
break;
case 10:
console.log(3);
break;
default: //當以上條件都不成立時、執行此處代
碼
console.log(4)
}
複製代碼
&& :而且、同時知足
|| :或、只要其中一個知足
&&
if(1==1 && 1==="1"){
//當兩個條件都成立、總體才成立
console.log(1);
}
||
if(isNaN("12px")||3==="3"){
//只要其中一個知足、條件成立
console.log(3);
}
複製代碼
JS 是單線程的、同一時間、只能作一件事
for 循環的四步曲
定義變量i;
判斷條件是否成立
執行循環體
執行i++
//執行過程1-->2-->3-->4-->2-->3-->4..
for(va i=0; i<10; i++){
console.log(1);
}
console.log(2);
continue:中止本輪循環
for(var i=0;i<10;i++){
if(i>5){
continue
}
console.log(100);
}
break:終止整個大循環
for(var i=0;i<10;i++){
if(i>5){
break;
}
console.log(100);
}
複製代碼
var obj={a:1,b:3,str:"www"};
for(var key in obj){
//key:表明屬性名、並且是個字符串
console.log(key);
//obj[key] 表明屬性名對應的屬性值
//會把屬性值是數字的先輸出
//輸出循序會根據屬性名進行排序、從小到大依次輸出
console.log(obj[key]);
}
複製代碼
通常用於不知道循環多少次時,用while
阻塞主線程、讓代碼在此處停留
同異步
var i=0;
while(i<4){
//改變while的條件通常在循環體中進行修改;
console.log(100);
i++;
}
複製代碼
var i=0
do{
console.log(111)
i=i+2
}while(i<10);
複製代碼